这不是一个特别的红宝石问题:更多的是关于算法的一般问题。但是可能有一些特定于 ruby 的数组方法很有帮助。
我有一个包含 30 个项目的数组。我要求在 15 到 30 之间的项目数,并且我想从整个数组中选择给定数量的项目,使其尽可能均匀分布。选择需要是非随机的,每次都返回相同的结果。
假设有人要 16 件商品。如果我返回前 16 个,那将是一个巨大的失败。相反,我可以返回所有奇数加上最后一个;如果我将数字 1 到 30 存储在数组中,我可以回馈
myArr.spread(16)
=> [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,30]
如果有人要 20 件商品,那就有点诡计了:我想不出一个好的程序化方式来做这件事。我觉得它一定已经被某人解决了。有什么建议么?