Используйте Ruby для усечения дублирующихся шаблонов в массиве - PullRequest
0 голосов
/ 09 февраля 2012

АДМИНИСТРАЦИЯ САЙТА: ВЫ БУДЕТЕ УДАЛИТЬ ЭТО ПОСТ?

Например, у меня есть

tt = [0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0]

и я бы хотел уменьшить его до

tt_out = [0, 1, 1, 2, 2, 1, 1, 0, 0]

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

tip = '0','1.','.5','6.','.11','12.','.15','16.','.20'

1 Ответ

1 голос
/ 09 февраля 2012
tt = [0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0]
tip = []
tt_out = tt.map.with_index{|t, i|
  start_range = (i==0 || tt[i-1] != tt[i])
  end_range = (tt[i+1] != tt[i])
  if start_range && end_range
    tip << "#{i}"
  elsif start_range
    tip << "#{i}."
  elsif end_range
    tip << ".#{i}"
  end
  t if start_range || end_range
}.compact

tip
=> ["0", "1.", ".5", "6.", ".11", "12.", ".15", "16.", ".20"]
tt_out
=> [0, 1, 1, 2, 2, 1, 1, 0, 0]

P.S .: У вас есть ошибка в вашем примере, последний элемент подсказки должен быть '.20'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...