0

这是我的数组:

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

我想打印每个索引位置的内容,除非这些内容与最后一个索引位置的内容相同。在这种情况下,这将是一个循环打印......

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

编辑:我的意思是我想打印直到最后一个元素的所有内容,除非最后一个元素与倒数第二个元素相同。对困惑感到抱歉。

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 回答