在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
在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
這裏是另一種方式:
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]"
array.group_by(&:本身).values ???它不起作用。 – bluexuemei
@bluexuemei你的意思是說這段代碼不起作用。你看到一些錯誤,或者你收到意想不到的結果?請更清楚。 – bronislav
未定義的方法'本身'1:Fixnum – bluexuemei
你的要求不明確;它似乎不像'group_by'那樣做你需要的。難道你不能迭代,存儲以前的值,並做任何你應該做的事情,直到當前值與前一個值不一樣爲止? –
@DaveNewton'group_by'不起作用。事情是,我想爲團隊做點事情,而不是爲每個人做點事情。這有任何意義嗎? – leejay100