我一直在寻找一种创建数组的方法:
[[1,1], [1,2], [1,3]
[2,1], [2,2], [2,3]
[3,1], [3,2], [3,3]]
现在我想出了这个解决方案:
w=3 # or any int
h=3 # or any int
array = []
iw=1
while iw<=w do
ih=1
while ih <=h do
array<<[iw, ih]
ih+=1
end#do
iw+=1
end#do
但是,我确信必须有更快的方式..? 这需要1.107秒......(w = 1900; h = 1080) 此致
编辑: 我应该注意到我坚持使用1.8.6 ..
答案 0 :(得分:6)
使用product
或repeated_permutation
:
[1, 2, 3].product([1, 2, 3]) # => [[1, 1], ...
# or
[1, 2, 3].repeated_permutation(2) # => [[1, 1], ...
product
在Ruby 1.8.7+中(接受1.9.2+中的块)而在1.9.2+中repeated_permutation
。对于其他版本的Ruby,您可以使用包含我的backports
gem和include 'backports/1.9.2/array/repeated_permutation'
或include 'backports/1.8.7/array/product'
。
答案 1 :(得分:4)
这类似于@nicooga的答案,但我会使用一个范围而不是手动创建数组(即所以你不必为更大的数组键入每个数字)。
range = (1..3).to_a
range.product(range)
#=> [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]
答案 2 :(得分:3)
有一种更快的方式:
> [1,2,3].product([1,2,3])
=> [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]