我需要迭代一個數組,不包括中間的值。我知道我可以做有沒有辦法迭代一個範圍,排除一個值
(0..10).each do |i|
unless i==6
...
end
end
但我想知道是否有更清潔的方式。我發現的最接近的解決方案是這樣的:
Is there an elegant way to exclude the first value of a range?
我需要這樣做遍歷我得到了通過組織得很差的數據。
我需要迭代一個數組,不包括中間的值。我知道我可以做有沒有辦法迭代一個範圍,排除一個值
(0..10).each do |i|
unless i==6
...
end
end
但我想知道是否有更清潔的方式。我發現的最接近的解決方案是這樣的:
Is there an elegant way to exclude the first value of a range?
我需要這樣做遍歷我得到了通過組織得很差的數據。
((0..10).to_a - [6]).each do |i|
...
end
您可以使用reject
方法來完成它。
我不知道它是一種更清潔的方式,但它只是另一種方式。
(0..10).reject { |v| v == 6 }.each do |i|
給我一個鏡頭,告訴我你對它有什麼看法。 :)
不知道是它的清潔劑或爲您簡單的情況下首選方式,但你可以做更復雜的情況是這樣
(0..10).select{|i| i!=6}.each do
# YOUR CODE
end
這絕對是一種
附:在寫答案,與答案拒絕一個到達:)這幾乎是相同的一個,我只是忘了拒絕,只記得選擇:)
您可以使用next
如果你只是想避開將您的代碼包裝在unless
區塊中。例如,如果你想跳過一組數字,你可以做喜歡的事:
skip_values = [3, 6, 7]
(0..10).each do |i|
# When i is 3, 6, or 7, continue to the next iteration
next if skip_values.include?(i)
...
end
我想你可以定義一個子類或補丁範圍本身的東西,如...
def reach not_this_one
each do |x|
yield x unless x == not_this_one
end
end
...或者...
def reach not_this_one, &block
self.select { |x| x != not_this_one }.each &block
end