2016-06-30 8 views
2
a = [1,4,1] 
total = [] 

a.each do |num| 
    total << a.select {|x| x != num} 
end 

p total => [[4], [1, 1], [4]] 

現在の要素以外の配列内の他の要素をすべて選択したいと考えています。重複がない場合は上のように動作しますが、存在する場合は出力が正しくありません。この場合、出力は次のようになります。現在の配列を除くすべてを選択する

[[4,1], [1, 1], [1,4]] 

私はeach_with_indexを使用してみましたし、インデックスの代わりに、数を目標とが、同じ問題に遭遇しました。何か案は?選択以外の何か?

おかげ

答えて

5

は、私は、これは慣用的でない場合に謝罪ので、Rubyの開発者の多くはないんだけど、この打撃を与えますか?

a = [1,4,1] 

total = a.each_index.map { |index| a[0...index] + a[(index+1)..-1] } 

p total 
+0

すみません、本当にありがとうございます!完璧に動作します! – user3007294

+3

これはインテリジェントなソリューションです。 @ user3007294も 'Array#combination'を見ています。例えば、a.combination(a.size - 1).to_a#=> [[4,1]、[1,1]、[1,4]] '(順序は保証されません) – engineersmnky

+0

ありがとう@engineersmnky!それはまた素晴らしいアプローチです – user3007294

関連する問題