2015-05-21 77 views
0

在Ruby中,如何將數組中的元素分組,直到找到不同的元素爲止?例如:由數組中的每一個組成的元素

array = [1, 1, 2, 3, 3, 1, 5, 6, 2] 

我想遍歷它,但直到下一個元素不同。我不想排序它,因爲它仍然需要按照這個順序。所以,如果我打算通過這個數組:

for [1, 1] do X 
for [2] do Y 
for [3, 3] do Z 
for [1] do X 
+0

你的要求不明確;它似乎不像'group_by'那樣做你需要的。難道你不能迭代,存儲以前的值,並做任何你應該做的事情,直到當前值與前一個值不一樣爲止? –

+0

@DaveNewton'group_by'不起作用。事情是,我想爲團隊做點事情,而不是爲每個人做點事情。這有任何意義嗎? – leejay100

回答

4

這裏是另一種方式:

array = [1, 1, 2, 3, 3, 1, 5, 6, 2] 
array.group_by(&:itself).values 
# => [[1, 1, 1], [2, 2], [3, 3], [5], [6]] 

#itself方法。

如果沒有上述要求,那麼#slice_when是你要走的路:

array.slice_when { |i,j| i != j }.to_a 
# => [[1, 1], [2], [3, 3], [1], [5], [6], [2]] 
array.slice_when { |i,j| i != j }.each { |n| p "do_something_with_#{n}" } 
# "do_something_with_[1, 1]" 
# "do_something_with_[2]" 
# "do_something_with_[3, 3]" 
# "do_something_with_[1]" 
# "do_something_with_[5]" 
# "do_something_with_[6]" 
# "do_something_with_[2]" 
+0

array.group_by(&:本身).values ???它不起作用。 – bluexuemei

+0

@bluexuemei你的意思是說這段代碼不起作用。你看到一些錯誤,或者你收到意想不到的結果?請更清楚。 – bronislav

+0

未定義的方法'本身'1:Fixnum – bluexuemei

相關問題