8

Rubyでインデックスを使用して配列を分割するエレガントな方法を探しています

例えば:

["a","b",3,"c",5].partition_with_index(2) 
    => [["a","b",3],["c",5]]

これまでのところ、私が考えることができる最善の方法は、以下を使用することです

["a","b",3,"c",5].partition.each_with_index{|val,index| index <= 2}
    => [["a","b",3],["c",5]]

これを達成するための他のエレガントな方法はありますか?

ありがとう!

4

6 に答える 6

14

できるよ:

["a","b",3,"c",5].partition.with_index { |_, index| index <= 2 }

Enumerators@ toro2k のアドバイスに従って、2 つを組み合わせて目的の出力を得るので、これはより良い解決策だと思います。

コード ブロックを に渡さない場合は、代わりにオブジェクトpartitionが返されます。現在のループ インデックスを維持するメソッドがあります。EnumeratorEnumeratorswith_index

于 2013-07-18T15:56:38.527 に答える
2

これは実行できますが、エレガントかどうかはわかりません:

a = ["a","b",3,"c",5]
index = 2
[a[0..index], a[index+1..-1]]

ありがとう

于 2013-07-18T15:53:34.940 に答える
0

以下を試すことができます:

a = ["a","b",3,"c",5]
par = a.slice_before(sum: -2) do |elem, state|
  state[:sum] += 1
  state[:sum] == 2
end.to_a
par
# => [["a", "b", 3], ["c", 5]]
于 2013-07-18T19:02:15.217 に答える