我需要做的事情非常简单,所以我不需要创建一个复杂的程序,我只需要使用一次,使这个结果成为我现在工作的实际项目的feed数据。
我需要得到一组n个元素的50个第一(或者更好的说,50个随机)组合,即从2到50的n个值。
从逻辑上讲,在ruby中

require 'pp'

pp (1..50).to_a.permutation.to_a.first(50)

但不幸的是,这些程序总是内存不足。事实上,我能在我的机器上生成的“最大”数是10,我需要50。
我很确定还有其他更有效的方法来实现这一点,但是因为我对数学不太了解,我需要你的帮助。你们中的任何人都知道一些gem,library,甚至是一个算法,它们以一种不消耗所有内存的方式来实现这一点。不管是否慢,正如我所说,我只需要生成一次这个东西。

最佳答案

不要对置换枚举数调用to_a,只将其用作枚举数:

(1..50).to_a.permutation.first(50)

但是如果你想要随机排列,你可以将数组洗牌50次:
ar = (1..50).to_a
Array.new(50){ar.shuffle}

10-07 19:00
查看更多