【发布时间】:2021-04-03 23:26:31
【问题描述】:
我有以下哈希数组:
[{:transaction_date=>nil, :net_amount=>100.0, :vat=>0.0},
{:transaction_date=>nil, :net_amount=>100.0, :vat=>0.0},
{:transaction_date=>nil, :net_amount=>100.0, :vat=>0.0},
{:transaction_date=>"test", :net_amount=>100.0, :vat=>0.0}]
如何删除每个 transaction_date=>nil 的键和值 od 以获得如下内容:
[{:net_amount=>100.0, :vat=>0.0},
{:net_amount=>100.0, :vat=>0.0},
{:net_amount=>100.0, :vat=>0.0},
{:transaction_date=>"test", :net_amount=>100.0, :vat=>0.0}]
我试图使用hash.select { |h| h[:transaction_date] },但我只得到:[{:transaction_date=>"test", :net_amount=>100.0, :vat=>0.0}] 结果。 compact也一样
【问题讨论】:
-
如果您使用的是 ruby >=2.4.6,您可以使用
arr.map {|hash| hash.compact }或仅使用arr.map(&:compact)。如果没有,您可以使用arr.map {|hash| hash.select {|_, v| !v.nil? } }。我建议检查this问题的第二个和第三个答案。 -
@Arun,请注意,如果该键的值为
nil,则要排除的是键:transaction_date;不排除任何值为nil的键。没错,它是示例中唯一值为nil的键,但将考虑限制在该键上是最安全的。 -
@CarySwoveland 好点。 @mr_muscle 如果您只想删除键为
:transaction_date且其值为nil的条目,则可能需要使用arr.map {|hash| hash.select {|k, v| k != :transaction_date || !v.nil?}}之类的东西。感谢@CarySwoveland 的评论! -
无关问题:语法
{ :key => nil }是否等同于{ key: nil }? -
@Fravadona:是的。
标签: ruby-on-rails ruby