ruby-on-rails - 从 ruby​​ 中的数组中删除尾随的 nil 值

标签 ruby-on-rails arrays ruby

我有一个像这样的数组:

[["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/

相关文章:

ruby-on-rails - 如何访问从实例方法传递给 acts_as 插件(ActiveRecord 装饰器)的选项?

javascript - 使用不同的键对多个数组对象进行排序

python - Numpy 3d 数组索引

ruby-on-rails - stderr/usr/local/bin/bundle : argument list too long while bundle install

sql - 查询间接关系

c - 在c中如何检查字符数组是否是> = 1的有效整数?

ruby - 适用于 Ruby 的强大 TCP 服务器?

ruby-on-rails - "[Class_Name] must exist"rails 5 rspec 测试协会

sql - 将sql结果转换为ActiveRecord关系

ruby-on-rails - 如何获取与搜索查询匹配的列?