0

Rubyで配列の要素を反復するにはどうすればよいですか?各ステップで、その時点で反復される要素を除くすべての要素を含む配列で何かを行うことができますか?

たとえば[4,2,8]、要素を反復処理してから、何かを行うことができます

  • [2,8]
  • [4,8]
  • [4,2]
4

4 に答える 4

1

それは実際には直接可能ではありません(欠落している要素が必要ない場合を除く)。ただし、自分でプログラムすることはできます。

オプション1-それを実行するだけです

a = [11,22,33,44,55]

a.each_with_index { |e,i|
  p e
  p a.take(i) + a[i+1..-1]
}

オプション2-アレイと統合

class Array
  def each_excluded(&block)
    self.each_with_index { |e, i|
      yield(e, self.take(i) + self[i+1..-1])
    }
  end
end

a.each_excluded { |e, rest|
  p e
  p rest
}

いずれかからの出力:

11
[22, 33, 44, 55]
22
[11, 33, 44, 55]
33
[11, 22, 44, 55]
44
[11, 22, 33, 55]
55
[11, 22, 33, 44]
于 2013-02-03T00:51:30.793 に答える
0
[4, 2, 8].tap{|a| a.length.times{|i| 
  do_something_you_want_with(a[0...i]+a[i+1..-1])
}}

また

class Array
  def each_but_one &pr
    length.times{|i| pr.call(self[0...i]+self[i+1..-1])}
  end
end

[4, 2, 8].each_but_one{|a| do_something_you_want_with(a)}
于 2013-02-03T01:05:46.003 に答える
0

それは本当にあなたが望むように見えますArray#combination:

[4,2,8].combination(2).each do |ary|
  p ary
end

どの出力:

[4, 2]
[4, 8]
[2, 8]

作成された各サブ配列はブロック (この場合は ) に渡されるaryため、値を使用して必要なことを行うことができます。

于 2013-02-03T03:23:25.873 に答える
0

slice メソッドを使用して、インデックスを持つものを除くアイテムで新しい配列を作成できます。

于 2013-02-03T00:29:56.797 に答える