6

我正在尝试将数组细分为数组对。

例如:["A","B","C","D"]应该变成[["A","B"],["C","D"].

我相信我已经成功了arg.each_slice(2).to_a。但是,如果我要arg.length在新数组上做,我仍然会得到 4。我希望得到 2(在上面的例子中)。

最后,我希望能够调用 to 的第一个元素,arg["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会改变你原来的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

在改变那里实例状态的红宝石方法中,通常 !在最后。例如

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 回答