Ruby 在哈希数组中组合两个哈希键的值
我有一个哈希数组:Ruby 在哈希数组中组合两个哈希键的值,ruby,Ruby,我有一个哈希数组: a = [{"ID"=>"FOO", "Type"=>"Name"}, {"ID"=>"1234", "Type"=>"CID"}] 我试图提取哈希值,其中类型=='CID',然后将这两个值组合成CID=1234 我可以通过多个步骤完成此操作: h = a.find{|x| x['Type']=='CID'} # => {"ID"=>"1234", "Type"=>"CID"} "#{h['Type']}=#{h['ID']}"
a = [{"ID"=>"FOO", "Type"=>"Name"}, {"ID"=>"1234", "Type"=>"CID"}]
我试图提取哈希值,其中类型=='CID'
,然后将这两个值组合成CID=1234
我可以通过多个步骤完成此操作:
h = a.find{|x| x['Type']=='CID'}
# => {"ID"=>"1234", "Type"=>"CID"}
"#{h['Type']}=#{h['ID']}"
# => "CID=1234"
有没有一种方法可以在一行中完成此操作?您可以使用以下方法在一行中完成此操作:
a.选择{| x | x['Type']='CID'}
.map{x |“type={x['type']},id={x['id']}}[0]
您可以尝试以下方法:
如果我们没有多个Type=“CID”值:
如果我们有类型=“CID”
如果上面的数组中没有Type=“CID”,则会抛出错误,请小心
需要在所有情况下工作我们需要做:
a.detect{|x| x["Type"]=="CID"}.values_at("Type", "ID").join("=") if a.detect{|x| x["Type"]=="CID"}
&
是Ruby的,它在Ruby v2.3中首次亮相。我添加它是为了在h[“Type”]
上没有匹配项时返回nil
我想我遗漏了一些东西-9502从何而来?什么是“两个值”?我做了一个更正。这两个值是1234
和CID
。这取决于键值对的特定顺序。@GaganGami谢谢,我已经解决了语法问题detect
在不匹配的情况下返回nil
,然后nil.values
返回错误。如果哈希中的顺序颠倒,{“Type”=>“CID”,“ID”=>“5678”}
?为了修复语法,需要删除封闭的方括号。以防万一,它还可以与[{“ID”=>“FOO”,“Type”=>“Name”}、{“ID”=>“1234”,“Type”=>“CID”}、{“ID”=>“5678”,“Type”=>“CID”}]
一起工作,删除[0]
,它返回字符串数组。
a.detect{|x| x["Type"]=="CID"}.values_at("Type", "ID").join("=")
a.detect{|x| x["Type"]=="CID"}.values_at("Type", "ID").join("=") if a.detect{|x| x["Type"]=="CID"}
a.find { |h| h["Type"] == "CID" }&.values_at("Type", "ID")&.join("=")
#=>"CID=1234"
a.find { |h| h["Type"] == "cat" }&.values_at("Type", "ID")&.join("=")
#=> nil