给定哈希数组,如何在评估另一个键时使用哈希的一个键上的select?

Max*_*wer 1 ruby

我的哈希数组:

data = [{:bool => true, :val => 5}, {:bool => false, :val => 9}, {:bool => true, :val => 1}]
Run Code Online (Sandbox Code Playgroud)

我想迭代数据并只检索一个值数组.我可以:

data.map{|x| x[:val] if x[:bool]}
Run Code Online (Sandbox Code Playgroud)

返回:

[5, nil, 1]
Run Code Online (Sandbox Code Playgroud)

但是这个方法需要额外的.compact调用来摆脱nil值.

有没有更好的方法来实现这一目标?

And*_*all 6

改用链接到第一select只那些:booltrue,然后map将结果:val:

data.select { |h| h[:bool] }.map { |h| h[:val] }  #=> [5, 1]
Run Code Online (Sandbox Code Playgroud)