我有一个像这样的数组:
[["a", nil, nil, nil], ["b", nil, "c", nil], [nil, nil, nil, nil]]
我想从 ruby 中的数组中删除所有尾随的 nil 值。
我试过 arr.map {|x| x.pop until x.last}
但是这种方法的问题是,当数组的所有值都为 nil 时,就像给定数组中的第三个数组一样,循环会卡住。
由于 until x.last
条件,如果所有值都是 nil 那么 map 函数应该返回一个空数组吗?
这应该是什么条件。
输出应该是
[['a'],['b','nil','c'],[]]
请记住,我只想删除不在中间的尾随 nil
值。
最佳答案
为此,您可以忽略外部数组,只对内部数组求解,然后使用 map
将解决方案应用于所有这些数组。
drop_while
将返回一个新数组,其中不包含满足某些条件(例如 nil?
)的所有前导项。然而,你想要尾随,所以结合 reverse
。
[nil,nil,5,nil,6,nil].reverse.drop_while(&:nil?).reverse
[nil, nil, 5, nil, 6]
然后对所有数组使用 map。
arr = [["a", nil, nil, nil], ["b", nil, "c", nil], [nil, nil, nil, nil]]
arr.map{|a| a.reverse.drop_while(&:nil?).reverse}
[["a"], ["b", nil, "c"], []]
如果您确实希望任何剩余的 nil
实际上是一个字符串,您可以将它与另一个映射结合起来执行您喜欢的任何此类转换。
关于ruby-on-rails - 从 ruby 中的数组中删除尾随的 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45860805/