6

给定一个数组,如:

[1, 2, nil, nil, 3, nil, 4, 5, 6, nil, nil, nil]

id 喜欢nil从数组末尾删除 's。用一些丑陋的循环来解决并不难,但我希望有一种 Ruby 方法可以做到这一点。

Result: [1, 2, nil, nil, 3, nil, 4, 5, 6]
4

5 回答 5

22

这个怎么样:

a.pop until a.last
于 2012-11-05T23:57:41.027 回答
7

不知道为什么你会想要 nil 介于两者之间,但我离题了!

array = [1, 2, nil, nil, 3, nil, 4, 5, 6, nil, nil, nil]
array.reverse.drop_while {|i| i == nil}.reverse
于 2012-11-05T21:43:27.450 回答
3
foo = [1, 2, nil, nil, 3, nil, 4, 5, 6, nil, nil, nil]
foo.reverse.drop_while(&:nil?).reverse
# [1, 2, nil, nil, 3, nil, 4, 5, 6] 
于 2012-11-05T21:45:19.570 回答
2

这是给你的单线:)

a =  [1, 2, nil, nil, 3, nil, 4, 5, 6, nil, nil, nil] 

a[0..a.rindex{|el| !el.nil?}] # => [1, 2, nil, nil, 3, nil, 4, 5, 6]
于 2012-11-05T21:42:00.623 回答
0
while(!(a = ar.pop)){}; ar.push a 

仍然是一个丑陋的循环,但也许不那么丑陋?

于 2012-11-05T21:41:55.320 回答