Рубин для петлевой печати лишних вещей - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть массив массивов, и это выглядит так:

[
  [[1, 3], [3, 0]],
  [[0, 0], [0, 3], [3, 2], [3, 3]],
  [[0, 1], [0, 2], [1, 0], [2, 0], [2, 3], [3, 1]],
  [[1, 2], [2, 2]],
  [[1, 1], [2, 1]]
]

Я хочу напечатать каждый элемент.Я ожидаю, что это вывод:

0,(1,3),(3,0)
1,(0,0),(0,3),(3,2),(3,3)
2,(0,1),(0,2),(1,0),(2,0),(2,3),(3,1)
3,(1,2),(2,2)
4,(1,1),(2,1)

Это мой код:

for indx in 0..4
    print "#{indx}"
    for cell in cell_arr[indx]
        print ",(#{cell[0]},#{cell[1]})"
    end
    if indx <= 4
      puts 
    end
end

Вывод, который я получил:

0,(1,3),(3,0)
1,(0,0),(0,3),(3,2),(3,3)
2,(0,1),(0,2),(1,0),(2,0),(2,3),(3,1)
3,(1,2),(2,2)
4,(1,1),(2,1)
0..4

В конце вывода мойкод генерирует что-то дополнительное.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вариант вложенности Enumerable#each_with_object внутри Enumerable#each_with_index:

array.map.with_index { |ary, i| (ary.each_with_object ([]) { |e, tmp| tmp << "(#{e.first}, #{e.last})" }).unshift(i).join(',') }

, который ставит:

# 0,(1, 3),(3, 0)
# 1,(0, 0),(0, 3),(3, 2),(3, 3)
# 2,(0, 1),(0, 2),(1, 0),(2, 0),(2, 3),(3, 1)
# 3,(1, 2),(2, 2)
# 4,(1, 1),(2, 1)


Вложенный цикл работает с каждым вложенным массивом следующим образом:
sub_arry = [[0, 1], [0, 2], [1, 0], [2, 0], [2, 3], [3, 1]]
res = sub_arry.each_with_object ([]) { |e, tmp| tmp << "(#{e.first}, #{e.last})" }
res #=> ["(0, 1)", "(0, 2)", "(1, 0)", "(2, 0)", "(2, 3)", "(3, 1)"]

Идея состоит в том, чтобы поместить индекс элемента в массив, а затем использовать Array#join для построения строкибыть напечатанным:

res.unshift(2).join(',')
#=> "2,(0, 1),(0, 2),(1, 0),(2, 0),(2, 3),(3, 1)"
0 голосов
/ 12 февраля 2019
0..4

- это возврат для Если вы позвоните

for i in 0..100
end

, возврат будет

0..100

, чтобы избежать этого:

for indx in 0..4
    print "#{indx}"
    for cell in cell_arr[indx]
        print ",(#{cell[0]},#{cell[1]})"
    end
    if indx <= 4
      puts 
    end
end; nil
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...