Как разбить массив на повторяющиеся элементы в Ruby - PullRequest
2 голосов
/ 13 июля 2020

Предполагая, что можно иметь массивы с последовательными повторяющимися элементами, я ищу способ превратить этот массив:

['A', 'B', 'C', 'C', 'D', 'D', 'F']

в этот:

[['A', 'B', 'C'], ['C', 'D'], ['D','F']]

Обратите внимание, что для В моем конкретном случае массив не может иметь более двух последовательных повторяющихся элементов.

Ответы [ 2 ]

11 голосов
/ 13 июля 2020

Enumerable # slice_when делает это.

arr = ['A', 'B', 'C', 'C', 'D', 'D', 'F']
p arr.slice_when{|a,b| a==b}.to_a

# =>[["A", "B", "C"], ["C", "D"], ["D", "F"]]
2 голосов
/ 13 июля 2020
arr = ['A', 'B', 'C', 'C', 'D', 'D', 'F']

arr.chunk_while(&:!=).to_a
  #=> [["A", "B", "C"], ["C", "D"], ["D", "F"]]

См. Enumerable # chunk_ while .

Старомодный способ:

arr.each_with_object([[]]) do |s,a|
  if s == a.last.last
    a << [s]
  else
    a.last << s
  end
end
  #=> [["A", "B", "C"], ["C", "D"], ["D", "F"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...