Ruby for Loop可以打印其他内容

时间:2019-02-12 02:22:36

标签: ruby

我有一个数组数组,看起来像这样:

[
  [[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 :(得分:3)

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

答案 1 :(得分:0)

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)"