1

如何创建一个二维数组,其中第一列是 i 和 j 之间的整数,第二列是小于 n 的随机数

就像是a = [[6,4],[7,3],[8,1],[9,1],[10,3],[11,2]]

我知道(i..j).to_a创建我的第一列并rand(n)创建我的第二列。

4

4 回答 4

5

使用可枚举#map

i, j = 6, 11
(i..j).map { |x| [x, rand(10)] }
# => [[6, 8], [7, 6], [8, 4], [9, 9], [10, 0], [11, 3]]
于 2013-07-27T14:31:14.070 回答
3

你快到了。使用 amap将您中的每个项目转换i..j RangeArray具有两个条目的 a:

i,j,n = 4,8,10
a = (i..j).map { |x| [x,rand(n)] }
于 2013-07-27T14:31:37.847 回答
1

另一个答案(被海报删除)几乎是正确的,只是缺少一些计算。它在没有评论的情况下得到了相当严厉的否决,我在这里重新发布,对数学进行更正,以便 OP 有一些替代方案:

i, j, n = 6, 11, 10    
Array.new( ­j - i + 1 ) { |x| [ x + i, rand(n)­] }
于 2013-07-27T14:46:29.457 回答
1

替代答案:

i=10
j=20
n=10
[(i..j).to_a , Array.new(j-i+1){rand(n)} ].transpose
于 2013-07-27T15:04:32.937 回答