更新: 关于红宝石我试图删除下一个元素,如果它比以前小。删除,如果下一个元素更小
输入将是
a = [2,1,3,4,7,6,8]
这样的输出将是
a = [2,3,4,7,8]
显然,如果没有,如果所有是顺序也就没有移除的元素。
更新: 关于红宝石我试图删除下一个元素,如果它比以前小。删除,如果下一个元素更小
输入将是
a = [2,1,3,4,7,6,8]
这样的输出将是
a = [2,3,4,7,8]
显然,如果没有,如果所有是顺序也就没有移除的元素。
我会做这样的:
a.each_index.map { |i| a[i] if i < 1 || a[i-1] < a[i] }.compact
=> [2, 3, 4, 7, 8]
这个是做这个工作的,tnx Yuriy – zetacu
a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last]
# => [1, 3, 4, 6, 8]
它给了我['1,3,4,6,8]'。但他想要[2,3,4,7,8]' –
@YuriyGolobokov它给我的结果和你一样。看看我写的输出。 OP是矛盾的。 – sawa
oops。是的,问题与示例不符。 –
跟踪以前的值是什么,并使用select来筛选出您不想要的值。
prev = - 1.0/0.0 #negative infinity
a.select {|num| delete = (prev < num); prev = num; delete}
在输入[2,1,3,4,7%,6,8]这给出的输出[2,3,4,7,8]。
a = [2,1,3,4,7,6,8]
prev = a[0]
p a.chunk { |e|
prev, prev2 = e, prev
prev<prev2
}.flat_map{|i,j| j unless i }.compact
# >> [2, 3, 4, 7, 8]
更新
正如@zetacu说:
,如果你有一个像数组[1,2, 3]删除第一个
不,它不会停止工作。
a = [1,2,3]
prev = a[0]
p a.chunk { |e|
prev, prev2 = e, prev
prev<prev2
}.flat_map{|i,j| j unless i }.compact
# >> [1, 2, 3]
b = a.take(1) + a.each_cons(2).flat_map { |x, y| y >= x ? [y] : [] }
#=> [2, 3, 4, 7, 8]
这一个也适用 – zetacu
你的问题说法是错误的。你删除的数字是1和6.后面的元素更大,而不是更小。 –
可能是你想删除_next_元素,如果它比以前更小? –
yuri这是正确的让我更新它 – zetacu