0

真ん中の値を除いて、配列を反復処理する必要があります。私は私ができることを知っています

 (0..10).each do |i|
     unless i==6
         ...
     end
  end

しかし、もっとクリーンな方法があるのだろうかと思います。私が見つけた最も近い解決策はこれでした:

範囲の最初の値を除外するエレガントな方法はありますか?

与えられた不十分に整理されたデータを反復処理するには、これを行う必要があります。

4

6 に答える 6

1
((0..10).to_a - [6]).each do |i|
  ...
end
于 2013-02-07T01:55:53.590 に答える
0

コードをブロック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
于 2013-02-07T01:26:04.737 に答える
0

メソッドを使用rejectしてそれを達成できます。

それがよりクリーンな方法かどうかはわかりませんが、それは単なる別の方法です。

(0..10).reject { |v| v == 6 }.each do |i|

試してみて、それについてどう思うか教えてください。:)

于 2013-02-07T01:23:18.500 に答える
0

シンプルなケースでは、それがよりクリーンで好ましい方法であるかどうかはわかりませんが、次のようなことができます

(0..10).select{|i| i!=6}.each do
  # YOUR CODE
end

より複雑なケースでは、これは間違いなく方法です

PS回答を書いているときに、拒否された回答が到着しました:)これはほとんど同じものです。拒否を忘れただけで、選択したことだけを覚えていました:)

于 2013-02-07T01:25:46.707 に答える
0

サブクラスを定義するか、範囲自体に次のようなパッチを適用できると思います...

  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
于 2013-02-07T01:36:50.667 に答える