ruby中的“Arrayselect”

ruby中的“Arrayselect”,arrays,ruby,Arrays,Ruby,我有两个哈希数组: data = [ { "id": 100, "name": "Rob", "age": "22", "job": "Tester" }, { "id": 101, "name": "Matt", "age": "28", "job": "Engineer" } ] compare_data = [{"age": "21"},{"age": "29"},{"age": "22"}] compar

我有两个哈希数组:

data = [
  {
    "id": 100,
    "name": "Rob",
    "age": "22",
    "job": "Tester"
  },
  {
    "id": 101,
    "name": "Matt",
    "age": "28",
    "job": "Engineer"
  }
]

compare_data = [{"age": "21"},{"age": "29"},{"age": "22"}]
compare_数据有{age:22},它匹配数据数组中的一个散列。我正在尝试获取一个与compare_数据匹配的数据元素数组。我希望得到:

[{:id=>100, :name=>"Rob", :age=>"22", :job=>"Tester"}]  
代码如下:

data.select do |each_item| 
  compare_data.map do |child| 
    child[:age].include?(each_item[:age])
  end
end
new_array # => {:id=>100, :name=>"Rob", :age=>"22", :job=>"Tester"}{:id=>101, :name=>"Matt", :age=>"28", :job=>"Engineer"}

但是,返回数组包含数据中的所有值。

将所有年龄映射到一个数组中,然后使用生成的年龄数组从原始数组中进行选择

compare_data_age = compare_data.map { |x| x[:age] }.uniq

data.select { |x| compare_data_age.include? x[:age] }

=> [{:id=>100, :name=>"Rob", :age=>"22", :job=>"Tester"}]

我不太清楚你想要什么?你能澄清一下吗?谢谢,但如果你看我的例子,地图里面应该有年龄值,每个_项目[:年龄]也是如此。为什么不起作用?我很困惑,所以这不是您期望的输出?或者你是在问我为什么你的代码不工作?后来,这就是我所期待的结果。非常感谢。但在我的代码中,我尝试将map和select结合起来。所以我有点困惑它在哪里失败了。代码不起作用的原因是select块中的map块将返回一个数组。现在,select希望您为它提供一个布尔值,以决定是否选择该条目。由于内部块总是返回一个被视为true的数组,因此select块将选择所有数据项。如果您仍然感到困惑,请尝试执行data。select do | x |[false]end将返回整个数据数组,其中用false替换[false]将不会返回预期结果。