如何在Ruby中制作可操作的数字网格

时间:2015-11-08 16:48:09

标签: arrays ruby matrix

我想在Ruby中创建一个数字网格,提供这样的输出(不完全,但接近):

0  1 2 3 4 5 6 7 8 9
   ------------------ 
1 |
2 |
3 |
4 |
5 |
6 |

其中空格(坐标点)用随机数填充。我还需要它可以操作(例如,我可以很容易地找到一个点的值,给定它的坐标并改变它)。我一直在尝试使用数组,但还没有找到一个很好的方法将它组合在一起。我怎样才能以高效的方式使用Ruby?

非常感谢你!

更新:我有一个这样的数组:

 $array = [

        # 0    1    2    3   4    5     6   7    8
        ['O', '-',' -','-', '-', '-', '-', '-', '-'], #0
         ['|', 'x','x','x', 'x', 'x', 'x', 'x', 'x'], #1
         ['|', 'x','x','x', 'x', 'x', 'x', 'x', 'x'], #2
         ['|', 'x','x','x', 'x', 'x', 'x', 'x', 'x'], #3


         ]

如何以友好的方式展示它?

1 个答案:

答案 0 :(得分:1)

好的尝试一下(参见之前答案的编辑,但这个是我觉得最好的):

grid = [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
         [2, 3, 4, 5, 6, 7, 8, 9, 0, 1],
         [3, 4, 5, 6, 7, 8, 9, 0, 1, 2],
         [4, 5, 6, 7, 8, 9, 0, 1, 2, 3],
         [5, 6, 7, 8, 9, 0, 1, 2, 3, 4],
         [6, 7, 8, 9, 0, 1, 2, 3, 4 ,5] ]

#prints first row and dashed line
r1 = grid[0]
f1 = grid[0][0]
print f1
print "   "
r1.shift
print r1.join(" ")
r1.unshift(f1)
puts ""
puts "   ------------------"

#Prints all other rows
grid.shift
grid.each do |r| 

        f = r[0]
        print f
        print " | "
        r.shift
        print r.join(" ")
        r.unshift(f)
        puts
end

输出:

0   1 2 3 4 5 6 7 8 9
   ------------------
1 | 2 3 4 5 6 7 8 9 0
2 | 3 4 5 6 7 8 9 0 1
3 | 4 5 6 7 8 9 0 1 2
4 | 5 6 7 8 9 0 1 2 3
5 | 6 7 8 9 0 1 2 3 4
6 | 7 8 9 0 1 2 3 4 5