如何在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_array
。 destination_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 } }