2012-02-09 23 views
-3

SITE管理員:您是否需要刪除此POST?使用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] 

我也想知道不重複的開始和結束的時候,所以我倒是希望具有以下尖端

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

您可以使用uniq方法http:// ruby​​-doc從Ruby中的數組中刪除重複的條目。 org/core-1.9.3/Array.html#method-i-uniq – 23tux 2012-02-09 15:45:09

+0

是的,但你怎麼做第二部分的問題。如果您能就此提出建議,我將不勝感激! – Dean 2012-02-09 15:46:33

+0

此外,請注意,我想找到重新發生的序列不只是爲了找到uniq條目。 – Dean 2012-02-09 15:48:06

回答

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'