我有一组长度为n的可变对象。由我的数据库中的记录数定义。
我需要一个函数来获取指定长度为m的数组的子集(保持对象按顺序并始终从索引0开始),其中m可以是我传入的任何整数。
e.g。如果n = 10且m = 4
数组foo = [0,1,2,3,4,5,6,7,8,9]
子集a = [0,1,2,3] 子集b = [4,5,6,7] 子集c = [8,9]
所以,我需要以编程方式能够说,“给定数组长度为n的长度为m的第i个子集。”使用前面的例子:“给我来自foo的长度为4的第二个子集”=>返回位置[4,5,6,7]的项目。
我希望这是有道理的。非常感谢协助红宝石解决方案! THX!
答案 0 :(得分:3)
foo.each_slice(subset_length).to_a[subset_index]
e.g。 foo.each_slice(4).to_a[2]
返回“来自foo的长度为4的第二个子集”。
答案 1 :(得分:2)
您可以使用Enumerable#each_slice
:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].each_slice(4).to_a
#=> [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9]]