Làm cách nào để đặt độ lệch bắt đầu cho vòng lặp each
trong ruby? Tôi muốn vòng lặp bắt đầu từ a[3]
thay vì a[0]
. Làm thế nào để tôi thiết lập điều đó?Ruby - mỗi bù đắp bắt đầu
a = [ab, cd, ef, gh, hi, jk]
a.each do |i|
#some stuff
end
Làm cách nào để đặt độ lệch bắt đầu cho vòng lặp each
trong ruby? Tôi muốn vòng lặp bắt đầu từ a[3]
thay vì a[0]
. Làm thế nào để tôi thiết lập điều đó?Ruby - mỗi bù đắp bắt đầu
a = [ab, cd, ef, gh, hi, jk]
a.each do |i|
#some stuff
end
khác, khả năng trực tiếp và dễ đọc hơn là sử dụng Array#drop
:
a.drop(3).each do |i|
# do something with item i
end
Bây giờ điều này thực sự tỏa sáng nếu kết hợp với các phương pháp khác được kế thừa từ Enumerable
, vì vậy rất có thể là có một lựa chọn tốt hơn cho vòng lặp bắt buộc each
bắt buộc của bạn. Giả sử bạn muốn lọc slice trích xuất và chuyển đổi nó sau đó:
a = [0,1,2,3,4,5,6,7]
a.drop(3).select(&:even?).map { |x| x * 2 }
# => [8, 12]
Hoặc nói rằng bạn muốn in một danh sách tất cả các giá trị:
a = ["1", "2", "3", "4", "5"]
puts a.drop(3).join("\n")
Output:
4
5
Những các tính năng được kế thừa từ lập trình chức năng là điều khiến Ruby trở nên mạnh mẽ :)
Sử dụng each
trên subpart của mảng. Trong ví dụ dưới đây, từ các yếu tố thứ tư đến cùng:
a[3..-1].each do |i|
#some stuff
end
a [a.size - 1] .each do | i | – JohnMerlino
này sẽ giúp bạn
a[3..-1].each do |i|
#your logic
end
Hầu hết Rubyist của quên đi cái cũ tốt cho vòng lặp:
n = 3
for i in n...a.size
puts a[i]
end
Bởi vì nó hút, vì nó không giới thiệu một phạm vi mới, đó là phản trực giác vì nó sử dụng 'do/end'. Ngoài ra, OP muốn liệt kê các mục mảng, không phải các chỉ mục. –
Huh? Mỗi cũng sử dụng do/end? Nếu bạn muốn một phạm vi mới, không sử dụng proc đóng cửa, sử dụng một cuộc gọi phương thức bên trong vòng lặp. Nếu có sự khác biệt chủ yếu giữa cho và mỗi khối mã của họ, tôi muốn biết điều đó (tôi cũng sử dụng cho các vòng lặp): –
Dù sao, tôi đã thêm [i] thay vì i vào mã, cám ơn. –
Ngôn ngữ lập trình chức năng nào ảnh hưởng đến kiểu lập trình này? – Vass
@Vass Trong LISP và sau đó Haskell dựa nhiều vào danh sách liên kết đơn lẻ liên tục, kiểu này khá phổ biến (ví dụ bạn sẽ tìm thấy các hàm cổ điển 'map',' filter', 'take',' drop', 'zip' vv mà bạn cũng tìm thấy trong module 'Enumerable' Ruby) –
Nó sẽ được tốt đẹp để xem một loạt các phương pháp như thả, trong khi thực hiện tìm kiếm nhị phân hoặc một số thuật toán sắp xếp khác – Donato