Как спроектировать 2D массив в новый массив в Ruby? - PullRequest
1 голос
/ 13 декабря 2011
source_array = Array.new(5) { Array.new(10) }
source_array[3][4] = 0
source_array[2][5] = 1
source_array[4][2] = 0.5

Теперь, чтобы создать новый массив destination_array того же размера, что и source_array. destination_array содержит только значения 0 и 1. Любое значение не ноль в source_array отображается на 1 в destination_array, а все значения nil отображаются на 0.

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

Каков наилучший способ сделать это в Ruby (1.9.2)?

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Опустить:

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 голосов
/ 13 декабря 2011
destination_array = source_array.map { |arr| arr.map { |elem| elem.nil? ? 0 : 1 } }
...