2012-05-29 47 views
4

我想將數組細分爲數組對。Ruby使用each_slice.to_a

例如:["A","B","C","D"]應該變成[["A","B"],["C","D"]

我相信我通過做arg.each_slice(2).to_a成功了。 但是,如果我然後在新陣列上做arg.length,我仍然得到4. 我期望得到2(在上面的例子中)。

最後,我想能夠將arg的第一個元素設爲["A","B"],但目前我仍然得到"A"

+0

什麼是你用確切的代碼? '[1,2,3,4] .each_slice(2).to_a.length'讓我回到2。你是否重新分配了這些值? – Makoto

回答

14
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"] 
+0

感謝您提供快速有效的回覆。在您的幫助下,我能夠迅速確定我的錯誤。 – Jglstewart

+0

很高興爲您提供幫助。如果有幫助,你能接受答案嗎? – Flexoid

+0

如果你可以把一些問題的答案作爲編輯來解決,那將會很棒。這有700多個觀點,並且相當混亂。 – ghayes

1

嘗試

arg = arg.each_slice(2).to_a 

在這種改變有實例的狀態通常有!末紅寶石的方法。例如

hash1.merge!(hash2) 
0

試試這個

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

=> [ 「A」, 「B」]

工作正常