2

我正在尝试生成一个如下所示的列表:

list = [[1, 1], [2, 2], [3, 3], [4, 4], ... [25, 25]]

有没有一种简单的方法可以用类似于range的东西来完成这个?

更新:看起来 .zip 获胜

  • .map 时间经过 1184.344 毫秒
  • .zip 耗时 706.23 毫秒

测试:

beginning_time = Time.now
(1..2500000).map { |i| [i,i] }
end_time = Time.now
puts "Time elapsed #{(end_time - beginning_time)*1000} milliseconds"

beginning_time = Time.now
(1..2500000).zip 1..25
end_time = Time.now
puts "Time elapsed #{(end_time - beginning_time)*1000} milliseconds"
4

4 回答 4

6

试试这个:

(1..25).map { |i| [i,i] }

输出:

[[1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9], [10, 10], [11, 11], [12, 12], [13, 13], [14, 14], [15, 15], [16, 16], [17, 17], [18, 18], [19, 19], [20, 20], [21, 21], [22, 22], [23, 23], [24, 24], [25, 25]]
于 2013-01-27T01:12:47.507 回答
3
(1..25).zip 1..25
#=> [[1, 1], [2, 2], [3, 3], [4, 4] ...
于 2013-01-27T01:28:50.790 回答
1

试试这个:

Array.new(25){|i| [i+1, i+1]}
于 2013-01-27T01:17:00.600 回答
1

好吧,迟到了 2 小时,而且,只是为了与众不同......

[[*1..25], [*1..25]].transpose
# => [[1, 1], [2, 2], [3, 3], [4, 4], ...

……或者……呵呵……

([[*1..25]]*2).transpose
于 2013-01-27T03:35:00.927 回答