Как заменить целые числа в многомерных массивах на строки - PullRequest
0 голосов
/ 24 декабря 2018

Я создаю таблицу в формате PDF.Существует многомерный массив целых чисел и строк, и у меня есть входные данные.Если значения массива равны входным данным, я заменяю значения на 'O', в противном случае на 'X'.Я хотел бы заменить другие значения на 'x'.Я хочу напечатать:

[a][b][c][d]

[ ][O][X][X]

[ ][X][X][X]

Кто-нибудь поможет?Мой код:

n = 0
Array = [["a","b","c", "d"]] +
[[" "]+[n,n+1,n+2].map{ |n| n + 1 }] + 
[[" "]+[n+3,n+4,n+5].map { |n| n + 1 }]

Array.collect! do |i| 
    if i.include?(1) #assume, input is 1
        i[i.index(1)] = 'X'; i
    else
        i
    end
end

Результаты:

[a][b][c][d]

[ ][X][2][3]

[ ][4][5][6]

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Это заменит все целые числа на 'X' и вернет требуемый массив.

n = 0
Array = [["a","b","c", "d"]] +
[[" "]+[n,n+1,n+2].map{ |n| n + 1 }] + 
[[" "]+[n+3,n+4,n+5].map { |n| n + 1 }]


Array.map { |a| a.map! { |b| (b.is_a? Integer) ? 'X' : b } }
0 голосов
/ 24 декабря 2018

это то, как вы можете циклически проходить по многомерному массиву, из вашего примера - массив двухмерный (x, y). Я заменил имя массива на arr1

n = 0
arr1 = [["a","b","c", "d"]] +
[[" "]+[n,n+1,n+2].map{ |n| n + 1 }] + 
[[" "]+[n+3,n+4,n+5].map { |n| n + 1 }]

# this is how you replace
arr1.each_with_index do |x, xi|
  x.each_with_index do |y, yi|
    if y.is_a? Integer
      x[yi] = 'X'
    end
  end
end

# this is how you check the result
arr1.each_with_index do |x, xi|
  x.each_with_index do |y, yi|
    puts "element [#{xi}, #{yi}] is #{y}"
  end
end

, и это будет вывод

element [0, 0] is a
element [0, 1] is b
element [0, 2] is c
element [0, 3] is d
element [1, 0] is
element [1, 1] is X
element [1, 2] is X
element [1, 3] is X
element [2, 0] is
element [2, 1] is X
element [2, 2] is X
element [2, 3] is X
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...