使用我的哈希数组:
data = [{:bool => true, :val => 5}, {:bool => false, :val => 9}, {:bool => true, :val => 1}]
我想遍历数据并仅检索值数组。我可以:
data.map{|x| x[:val] if x[:bool]}
返回:
[5, nil, 1]
但是这个方法需要一个额外的 .compact 调用来摆脱 nil 值。
有没有更好的方法来实现这一目标?
使用我的哈希数组:
data = [{:bool => true, :val => 5}, {:bool => false, :val => 9}, {:bool => true, :val => 1}]
我想遍历数据并仅检索值数组。我可以:
data.map{|x| x[:val] if x[:bool]}
返回:
[5, nil, 1]
但是这个方法需要一个额外的 .compact 调用来摆脱 nil 值。
有没有更好的方法来实现这一目标?
data.map { |x| x[:val] if x[:bool] }.compact
可能是最容易阅读的,但您可以通过以下方式进行一个函数调用reduce
:
data.reduce([]) { |m,x| m << x[:val] if x[:bool]; m }
这似乎不是一种优雅的方式,但你可以试试这个:
data = [{:bool => true, :val => 5}, {:bool => false, :val => 9}, {:bool => true, :val => 1}]
result = Array.new
data.each do |b|
val = Hash.try_convert(b)[:val]
result.unshift(val)
end