Ruby - 基于另一个数组过滤哈希数组

时间:2017-07-07 15:23:26

标签: arrays ruby

我正在尝试根据另一个数组过滤哈希数组。什么是实现这一目标的最佳方法?以下是我现在的2个畜生:

x=[1,2,3]
y = [{dis:4,as:"hi"},{dis:2,as:"li"}]

1) aa = []
x.each do |a|
  qq = y.select{|k,v| k[:dis]==a}
  aa+=qq unless qq.empty?
end

2) q = []
y.each do |k,v|
  x.each do |ele|
    if k[:dis]==ele
      q << {dis: ele,as: k[:as]}
    end
  end
end 

这是我想要的输出:

[{dis:2,as:"li"}]

3 个答案:

答案 0 :(得分:6)

如果您只想选择:dis中包含x值的元素:

y.select{|h| x.include? h[:dis]}

答案 1 :(得分:0)

是的,使用select,尽管如此,这是另一种有效的方式:

y.each_with_object([]) { |hash,obj| obj << hash if x.include? hash[:dis] }

答案 2 :(得分:0)

您可以使用.keep_if

删除y的不合格元素
> y.keep_if { |h| x.include? h[:dis] }

或者用.delete_if反转逻辑:

> y.delete_if { |h| !x.include? h[:dis] }

所有产品:

> y
=> [{:dis=>2, :as=>"li"}]