2013-07-14 22 views
-2

更新: 关于红宝石我试图删除下一个元素,如果它比以前小。删除,如果下一个元素更小

输入将是

a = [2,1,3,4,7,6,8] 

这样的输出将是

a = [2,3,4,7,8] 

显然,如果没有,如果所有是顺序也就没有移除的元素。

+3

你的问题说法是错误的。你删除的数字是1和6.后面的元素更大,而不是更小。 –

+0

可能是你想删除_next_元素,如果它比以前更小? –

+0

yuri这是正确的让我更新它 – zetacu

回答

2

我会做这样的:

a.each_index.map { |i| a[i] if i < 1 || a[i-1] < a[i] }.compact 
=> [2, 3, 4, 7, 8] 
+0

这个是做这个工作的,tnx Yuriy – zetacu

1
a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last] 
# => [1, 3, 4, 6, 8] 
+0

它给了我['1,3,4,6,8]'。但他想要[2,3,4,7,8]' –

+0

@YuriyGolobokov它给我的结果和你一样。看看我写的输出。 OP是矛盾的。 – sawa

+0

oops。是的,问题与示例不符。 –

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]。

+0

如果你有一个像[1,2,3]这样的数组,它将删除第一个 – zetacu

+0

呵呵,它对我来说工作得很好。它看起来并不像[1,2,3]那样表现不好,因为-Infinity应该比一切都少。这可能是Ruby版本的差异吗?我在2.0.0上,那你呢? –

+0

我在红宝石1.9出于某种原因删除第一个 – zetacu

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] 
+0

如果你有一个像[1,2,3]这样的数组,它会删除第一个数字 – zetacu

+0

@zetacu没有亲爱的!运行代码,它按预期工作.. –

+0

mm我的bab可能我在控制台中输入了一些额外的信息 – zetacu

2
b = a.take(1) + a.each_cons(2).flat_map { |x, y| y >= x ? [y] : [] } 
#=> [2, 3, 4, 7, 8] 
+0

这一个也适用 – zetacu

相关问题