2011-12-13 97 views
1
source_array = Array.new(5) { Array.new(10) } 
source_array[3][4] = 0 
source_array[2][5] = 1 
source_array[4][2] = 0.5 

現在,創建一個與source_array尺寸相同的新陣列destination_arraydestination_array僅包含值0和1。在destination_array source_array映射到1的任何非空值,所有零值映射到0如何在2D中將2D數組投影到新數組中?

destination_array = Array.new(5) { Array.new(10, 0) } 
... 

什麼是紅寶石(1.9.2)做到這一點的最好方法是什麼?

回答

3

省略:

destination_array = Array.new(5) { Array.new(10, 0) } 

,而使用:

destination_array = source_array.map { |subarray| subarray.map { |item| item.nil? ? 0 : 1 } } 

這會給你想要的東西。

這裏的關鍵是讓迭代函數Array#map爲你執行工作,這樣你就不必擔心索引。這適用於任何需要輸入和輸出數組尺寸相同的2維數組。

2
destination_array = source_array.map { |arr| arr.map { |elem| elem.nil? ? 0 : 1 } }