2011-06-21 128 views
1

我有一个变量长度为n的对象数组。由我的数据库中的记录数决定。如何从一个可变长度的数组中获取一个可变长度数组的指定子集?

我需要一个函数来抓住子集的指定长度为m的阵列,其中m可以是我通过在任何整数的(保持对象,以便始终在索引0处开始)。

例如如果n = 10且m = 4

阵列富= [0,1,2,3,4,5,6,7,8,9]

子集的= [0,1,2, 3] 子集b = [4,5,6,7] 子集C = [8,9]

所以,我需要以编程方式可以说,“给我的长度为m的第i个亚组从数组中,给定数组的长度为n。“使用前面的例子:“给我从foo开始的第四个长度为4的子集”=>返回位置[4,5,6,7]处的项目。

我希望这是有道理的。我们将非常感谢红宝石解决方案的帮助!谢谢!

+0

只是为了澄清:将方法签名大致如下'高清条(subset_index,subset_length)'? –

回答

3
foo.each_slice(subset_length).to_a[subset_index] 

例如, foo.each_slice(4).to_a[2]返回“来自foo的长度为四的第二子集”。

+0

这该死的就是我所需要的。非常感谢! – istan

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]] 
+1

这种语言永远不会令我惊讶。然而,从这个问题引用(http://stackoverflow.com/questions/2293734/why-doesnt-each-slice-work)说,需要在Ruby 1.8.6中为这个解决方案需要'enumerator''上班。在1.8.7和1.9中没有问题。 – Sorrow

+0

谢谢! JacobM就在你面前,所以他得到了支票 – istan