真ん中の値を除いて、配列を反復処理する必要があります。私は私ができることを知っています
(0..10).each do |i|
unless i==6
...
end
end
しかし、もっとクリーンな方法があるのだろうかと思います。私が見つけた最も近い解決策はこれでした:
与えられた不十分に整理されたデータを反復処理するには、これを行う必要があります。
真ん中の値を除いて、配列を反復処理する必要があります。私は私ができることを知っています
(0..10).each do |i|
unless i==6
...
end
end
しかし、もっとクリーンな方法があるのだろうかと思います。私が見つけた最も近い解決策はこれでした:
与えられた不十分に整理されたデータを反復処理するには、これを行う必要があります。
((0..10).to_a - [6]).each do |i|
...
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
メソッドを使用reject
してそれを達成できます。
それがよりクリーンな方法かどうかはわかりませんが、それは単なる別の方法です。
(0..10).reject { |v| v == 6 }.each do |i|
試してみて、それについてどう思うか教えてください。:)
シンプルなケースでは、それがよりクリーンで好ましい方法であるかどうかはわかりませんが、次のようなことができます
(0..10).select{|i| i!=6}.each do
# YOUR CODE
end
より複雑なケースでは、これは間違いなく方法です
PS回答を書いているときに、拒否された回答が到着しました:)これはほとんど同じものです。拒否を忘れただけで、選択したことだけを覚えていました:)
サブクラスを定義するか、範囲自体に次のようなパッチを適用できると思います...
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