Tôi đang gặp khó khăn khi hiểu các phương thức shift và unshift của lớp Array làm gì trong Ruby. Ai đó có thể giúp tôi hiểu họ làm gì không?
pushnó vào đầu, và shiftnó ra đầu kia.
Tôi đang gặp khó khăn khi hiểu các phương thức shift và unshift của lớp Array làm gì trong Ruby. Ai đó có thể giúp tôi hiểu họ làm gì không?
pushnó vào đầu, và shiftnó ra đầu kia.
Câu trả lời:
Nhìn vào Tài liệu Ruby
Array.shift xóa phần tử đầu tiên khỏi mảng và trả về nó
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Unshift thêm giá trị đã cho vào trước mảng, di chuyển tất cả các phần tử khác lên trên một
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shiftvà unshifthoạt động như một ngăn xếp FILO, pushvà shiftsẽ hoạt động như một hàng đợi FIFO, trừ khi tôi nhầm lẫn về điều gì đó.
shiftvà unshifthoạt động theo cách tương tự như popvà push: chúng có nghĩa là sử dụng các mảng làm ngăn xếp mà bạn có thể nối và xóa các phần tử (thường là một phần tử mỗi lần). Sự khác biệt chỉ là shiftvà unshiftthêm / bớt các phần tử ở đầu một Array, thực sự thay đổi tất cả các phần tử khác, trong khi popvà pushthêm / bớt các phần tử ở cuối Array, do đó vẫn giữ nguyên các chỉ số của các phần tử khác.
Ví dụ:
# Spacing for clarity:
a = [2, 4, 8] # a => [2, 4, 8]
a.push(16, 32) # a => [2, 4, 8, 16, 32]
a.unshift(0, 1) # a => [0, 1, 2, 4, 8, 16, 32]
a.shift # a => [1, 2, 4, 8, 16, 32]
a.pop # a => [1, 2, 4, 8, 16]
Nó lấy phần tử đầu tiên, xóa nó khỏi mảng và trả về phần tử đã xóa. Về cơ bản nó là một cách để coi một mảng giống như một ngăn xếp: shiftlà pop, unshiftlà push.
popvà pushcũng là Arrayphương pháp, không nên nhầm lẫn. :-)
Nếu bạn có thể coi mảng giống như một hàng đợi các giá trị cần được xử lý, thì bạn có thể lấy giá trị (phía trước) tiếp theo và "dịch chuyển" giá trị khác qua để chiếm không gian có sẵn. unshift đặt các giá trị trở lại - có thể bạn chưa sẵn sàng xử lý một số trong số chúng hoặc sẽ để một số mã sau này xử lý chúng.
shift/unshiftgiống nhưpush/popở đầu kia của mảng, bạn có thể nhẩm chữ 'f' khỏi tên của các phương thức để nhớ phương thức nào 'kết xuất' và phương thức nào 'chèn' chúng. :)