2014-07-11 56 views
0

我是Ruby的新手,我试图通过传递两个值作为高度,另一个作为宽度来创建实质上的图表。创建后,我希望能够单独调用图上的每个点。我知道我需要创建一个散列和或数组来存储图上的每个点,但我不知道如何迭代每个值。红宝石 - 如何创建绘图点

例如

def graph_area(x, y) 
    x = 4 
    y = 2 
    # Given the above info my graph would have 8 points 
    # However I'm not sure how to make create an array that returns 
    # {[x1, y1] => 1, [x1, y2] => 2, [x2, y1] => 3, [x2, y2]...} etc 

    # output 
    #  1234 
    #  5678 
end 

是这种方法,即使是一个实践?

回答

2

您需要创建数组的数组:

def graph_area(x, y) 
    counter = 0 
    Array.new(y) { Array.new(x) { counter += 1 }}  
end 

board = graph_area(4,2) 
puts board.map(&:join) 

#=> 
# 1234 
# 5678 

您可以通过访问特定的字段(0 - 索引):

board[0][0] #=> 1 
1

下面是使用each_slice做这件事的方式:

def graph_area(x, y) 
    (1..x*y).each_slice(x).to_a 
end 

area = graph_area(4, 2) 
# => [[1,2,3,4],[5,6,7,8]] 
area[0][0] 
# => 1 
area[1][2] 
# => 7