Удалить группы последовательных чисел из массива в Ruby - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть массив:

[1, 2, 3, 6, 8, 9, 10, 23, 34, 35, 36, 45, 50, 51, ...]

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

[6, 23, 45, ...]

Я ищу аномалии в серийномидентификаторы.У кого-нибудь есть предложения?

Моя первоначальная попытка проверяет только идентификатор перед каждым элементом:

non_consecutive_ids = []
ids.each_with_index do |x, i|
  unless x == ids[i-1] + 1
    non_consecutive_ids << x
  end
end

То, что я пропустил, я также проверял, нет ли следующего элемента вмассив на 1 больше текущего.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Другой вариант:

array.chunk_while { |i, j| i + 1 == j }.select { |e| e.size == 1 }.flatten
#=> [6, 23, 45]

Польза Enumerable # chunk_ while в том, что он принимает два параметра.В базовом документе приведен только один пример возрастающей подпоследовательности.

0 голосов
/ 20 ноября 2018

Вы можете использовать select и проверить окружающие значения:

array.select.with_index{ |x, index| (array[index-1] != x-1) && (array[index+1] != x+1)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...