2013-07-27 46 views
1

如何可以创建一个二维阵列,其第一栏是i和j和第二列之间的整数是小于n创建在红宝石图案

类似a = [[6,4],[7,3],[8,1],[9,1],[10,3],[11,2]]

我较小的随机数的2D阵列知道(i..j).to_a创建我的第一列,rand(n)创建我的第二列。

回答

5

使用Enumerable#map

i, j = 6, 11 
(i..j).map { |x| [x, rand(10)] } 
# => [[6, 8], [7, 6], [8, 4], [9, 9], [10, 0], [11, 3]] 
3

你几乎没有。使用map每个项目转换成你的i..jRangeArray有两个条目:

i,j,n = 4,8,10 
a = (i..j).map { |x| [x,rand(n)] } 
+0

范围是枚举,不需要转换为数组来映射它。 – tokland

+0

@tokland:没有发现,更新,谢谢! –

1

的备选答案(即得到了由海报移除),几乎是正确的,只是缺少一些计算。它得到了相当严厉向下投不加评论,我重新张贴在这里,有修正的数学,使OP有一些替代方法:

i, j, n = 6, 11, 10  
Array.new(­j - i + 1) { |x| [ x + i, rand(n)­] } 
1

备选答案:

i=10 
j=20 
n=10 
[(i..j).to_a , Array.new(j-i+1){rand(n)} ].transpose