6

配列を配列のペアに分割しようとしています。

例:["A","B","C","D"]になる必要があり[["A","B"],["C","D"]ます。

することで成功したと思いますarg.each_slice(2).to_a。しかしarg.length、新しい配列で実行すると、まだ 4 になります。(上記の例では) 2 になると予想しています。

arg最後に、 to beの最初の要素を呼び出せるようにしたいのです["A","B"]が、現時点ではまだ"A".

4

3 に答える 3

20
array = ["A", "B", "C", "D"]

array
 => ["A", "B", "C", "D"]

array.each_slice(2).to_a
 => [["A", "B"], ["C", "D"]]

array.each_slice(2).to_a.length
 => 2

array.each_slice(2).to_a元の が変更されることを期待しているかもしれませんが、Ruby のほとんどのように非破壊的なメソッドであるためarray、ここでは新しいArrayオブジェクトが作成されます。each_slice

new_array = array.each_slice(2).to_a
new_array
 => [["A", "B"], ["C", "D"]]
new_array[0]
 => ["A", "B"]
于 2012-05-29T14:57:31.003 に答える
1

試す

arg = arg.each_slice(2).to_a

インスタンスの状態を変更するRubyメソッドでは、通常 !、最後にあります。例えば

hash1.merge!(hash2)
于 2012-05-29T14:56:48.643 に答える
0

これを試して

1.9.2p180 :015 > ['A', 'B', 'C', 'D'].each_slice(2).to_a[0]

=> [「A」、「B」]

正常に動作します

于 2012-05-29T14:57:48.260 に答える