这是我的数组:
num_arr = ["cat","dog","penguin","penguin"]
我想打印每个索引位置的内容,除非这些内容与最后一个索引位置的内容相同。在这种情况下,这将是一个循环打印......
["cat","dog","penguin"]
编辑:我的意思是我想打印直到最后一个元素的所有内容,除非最后一个元素与倒数第二个元素相同。对困惑感到抱歉。
那这个呢?
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"]
foo = ["cat","dog","penguin","penguin"]
=> ["cat", "dog", "penguin", "penguin"]
answer = foo.reject { |ele| ele == foo.last }
=> ["cat", "dog"]
我相信这就是你所要求的。
new_array = array.each_with_object([]) { |element, result| result << element unless result.last == element }
new_array.each { |element| puts element }
如果您只想打印所有唯一条目,请在这种情况下使用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"