2017-03-09 81 views
2

我需要將一個整數數組(如[1,2,3])轉換爲數組,其中每個整數後跟零:[1,0,2,0,3,0]將值插入Ruby中的每個其他數組索引

我最好的猜測,其中作品,但看起來jenky:

> [1,2,3].flat_map{|i| [i,0]} => [1,0,2,0,3,0] 
+2

imo,'flat_map'是理想的。它的效率很高,閱讀很好。如果你沒有提到它,我會給它作爲答案。順便說一句,你的問題只是暗示。最好總是說出這個問題。 –

+0

'[i,0]'表示_「整數每個後面跟着一個零」__很好。 – Stefan

回答

4

雖然Array#zip工作得很好,人們可能避免預創建零陣通過使用Array#product

[1,2,3].product([0]).flatten 

,或者只是使用減速機:

[1,2,3].each_with_object([]) { |e, acc| acc << e << 0 } 
1

漂亮的直線前進與zip

a = (1..10).to_a 

b = Array.new(a.length, 0) 

a.zip(b).flatten 
# => [1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0] 
+0

你應該內聯b,imo。 – Alexander

+0

當我看到'Array.new'構造時,我總是擔心我突然在javascript土地上醒來:)'b = [0] * a.size'? – mudasobwa

+2

@mudasobwa JavaScript的'new Array()'和那個更加不可預測,因爲'new Array(10)'是一個長度爲10的數組,而'New Array(10,11)'是一個兩元素數組。 Ruby的更一致:'Array.new(size = 0,default = nil)' – tadman

0

這似乎和你一樣 - ))

[1,2,3].map {|i| [i, 0] }.flatten 

而且這一點。

[1,2,3].collect {|x| [x, 0] }.flatten 

醜陋和無效的解決方案。

[1,2,3].join("0").split("").push(0).map{|s| s.to_i } 
+1

'map'在'collect'的別名中,前兩個完全相同。後者不適用於2位數字。 – mudasobwa

+0

感謝您的意見。 – marmeladze

相關問題