更新: 在ruby上我试图删除下一个元素,如果它比以前小。
输入将是
a = [2,1,3,4,7,6,8]
所以输出将是
a = [2,3,4,7,8]
显然,如果没有一个是顺序的,那么就不会删除任何元素。
答案 0 :(得分:2)
我会这样做:
a.each_index.map { |i| a[i] if i < 1 || a[i-1] < a[i] }.compact
=> [2, 3, 4, 7, 8]
答案 1 :(得分:2)
b = a.take(1) + a.each_cons(2).flat_map { |x, y| y >= x ? [y] : [] }
#=> [2, 3, 4, 7, 8]
答案 2 :(得分:1)
a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last]
# => [1, 3, 4, 6, 8]
答案 3 :(得分:0)
跟踪上一个值,并使用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]。
答案 4 :(得分:0)
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]