6

次のような配列が与えられた場合:

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

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 に答える