2012-02-09 8 views
-3

サイト管理人:この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

+0

はい。しかし、あなたはどのようにして質問の第2部分を行うことができますか?あなたがそれについてアドバイスできるなら、私は感謝します! – 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] 
を持っているしたいとdは

PS:あなたの例でエラーが発生しました。最後の要素は「.20」

関連する問題