如何在2D中将2D数组投影到新数组中?

问题描述:

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)做到这一点的最好方法是什么?

省略:

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维数组。

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