Arrays 如何在与数组匹配的哈希中筛选特定的键值对

Arrays 如何在与数组匹配的哈希中筛选特定的键值对,arrays,ruby,hash,Arrays,Ruby,Hash,我的意见是: {"id"=>34, "fname"=>"XXX", "department"=>"IT", "email"=>"xxx@example.com"} schema = [ {:type=>"string", :name=>"email", :control_type=>"email", :label=>"EMAIL"}, {:type=>"string", :name=>"fname", :control_typ

我的意见是:

{"id"=>34, "fname"=>"XXX", "department"=>"IT", "email"=>"xxx@example.com"}

schema = [
  {:type=>"string", :name=>"email", :control_type=>"email", :label=>"EMAIL"},
  {:type=>"string", :name=>"fname", :control_type=>"text", :label=>"FNAME"},
  {:type=>"string", :name=>"surname", :control_type=>"text", :label=>"LNAME"}
]
如何仅选择:

{"fname"=>"XXX", "email"=>"xxx@example.com"}

匹配
架构
数组的
:名称

您可以首先从
架构

fields = schema.map{|f| f[:name]}
然后过滤掉您的输入:

input =  {"id"=>34, "fname"=>"XXX", "department"=>"IT", "email"=>"xxx@example.com"}

input.select{|k, v| fields.include?(k)}
#=>  {"fname"=>"XXX", "email"=>"xxx@example.com"}

Rails提供了一个
Hash
方法,使过滤变得非常简单。结合splat操作符
*
可以编写以下代码

fields = schema.map { |e| e[:name] }

input.slice(*fields)
#=> {"fname"=>"XXX", "email"=>"xxx@example.com"}

你能告诉我们你到目前为止都做了些什么吗?谢谢。我尝试循环模式和输入,但没有得到想要的结果。