0

これが私の配列です:

num_arr = ["cat","dog","penguin","penguin"]

各インデックス位置の内容が最後のインデックス位置の内容と同じでない限り、それらの内容を印刷したいと思います。この場合、それは出力するループになります...

["cat","dog","penguin"]

編集:最後の要素が最後から2番目の要素と同一でない限り、最後の要素まですべてを印刷したいということです。混乱させて申し訳ありません。

4

4 に答える 4

4

これはどうですか?

num_arr[0...-1] + (num_arr[-2] == num_arr[-1] ? [] : [num_arr[-1]])

冗長ではありませんが、理解するのがやや困難です。

num_arr[0...-2] + num_arr[-2..-1].uniq
#=> ["cat", "dog", "penguin"]
于 2012-05-09T18:08:06.043 に答える
2
foo = ["cat","dog","penguin","penguin"]
=> ["cat", "dog", "penguin", "penguin"] 

answer = foo.reject { |ele| ele == foo.last }
=> ["cat", "dog"]

これがあなたが求めているものだと思います。

于 2012-05-09T17:57:10.190 に答える
1
new_array = array.each_with_object([]) { |element, result| result << element unless result.last == element }
new_array.each { |element| puts element }
于 2012-05-09T18:01:38.260 に答える
0

すべての一意のエントリを出力するだけの場合は、この場合uniq はArrayのメソッドを使用します。

["cat","dog","penguin","penguin"].uniq.map{|a| p a}

コンソール

ruby-1.9.2-p290 :004 > ["cat","dog","penguin","penguin"].uniq.map{|a| p a}
"cat"
"dog"
"penguin"
 => ["cat", "dog", "penguin"] 

アップデート:

最後のエントリの比較のみを行いたい場合は、最後のエントリをに保存し@prev、比較後に現在のエントリに割り当てることで、それを行うことができます。

["cat", "dog", "penguin", "penguin"].map{|a| p a if @prev!=a;@prev=a }

コンソール

ruby-1.9.2-p290 :009 > ["cat", "dog", "penguin", "dog", "penguin"].map{|a| p a if @prev!=a;@prev=a }
"cat"
"dog"
"penguin"
"dog"
"penguin"

ruby-1.9.2-p290 :010 > ["cat", "dog", "penguin", "penguin"].map{|a| p a if @prev!=a;@prev=a }
"cat"
"dog"
"penguin"
于 2012-05-09T17:32:56.627 に答える