2011-06-21 183 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