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?
push
nó vào đầu, và shift
nó 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?
push
nó vào đầu, và shift
nó 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"]
shift
và unshift
hoạt động như một ngăn xếp FILO, push
và shift
sẽ hoạt động như một hàng đợi FIFO, trừ khi tôi nhầm lẫn về điều gì đó.
shift
và unshift
hoạt động theo cách tương tự như pop
và 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à shift
và unshift
thê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 pop
và push
thê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: shift
là pop, unshift
là push.
pop
và push
cũng là Array
phươ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/unshift
giố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. :)