2012-02-09 2 views
-3

АДМИНИСТРАЦИЯ САЙТА: ВЫ УДАЛИТЬ ЭТОТ ПОЧТУ?Использование Ruby для усечения дубликатов в массиве

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

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] 

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

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

Вы можете удалить повторяющиеся записи из массива в Ruby с помощью метода uniq http: // ruby-doc. org/core-1.9.3/Array.html # method-i-uniq – 23tux

+0

да, но как вы можете сделать вторую часть вопроса. Буду признателен, если бы вы могли посоветовать об этом! – Dean

+0

Также обратите внимание, что я хотел бы найти последовательность повторного появления не только для поиска записей uniq. – Dean

ответ

1
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] 

PS: У вас есть ошибка в вашем примере, последний элемент наконечника должен быть «.20»

Смежные вопросы