这不是一个特别的ruby问题:更多关于算法的常见问题。但可能有一些特定于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个项目,它需要一点小技巧:我不能马上想到这样做的一个很好的编程方法。我觉得它一定已经被某人解决了。有什么建议么?
这听起来像贾斯汀高的答案,确实有点下滑(见评论)。 – 2012-08-13 12:27:40
@MaxWilliams,为了达到你想要的效果,你只需要调整一下使用的数字:而不是'array_size/number_to_select',你可以使用'(array_size-1)/(number_to_select-1)'作为“stride ”。计数从0到'number_to_select-1',并在每一步乘以“步幅”。 – 2012-08-13 12:47:47