繁体   English   中英

将两个哈希键的值合并到一个哈希数组中

[英]Combine the values of two hash keys in an array of hashes

我有一系列哈希:

a = [{"ID"=>"FOO", "Type"=>"Name"}, {"ID"=>"1234", "Type"=>"CID"}]

我正在尝试提取Type=='CID'的哈希值,然后将这两个值合并以得出CID=1234

我可以分多个步骤进行操作:

h = a.find{|x| x['Type']=='CID'}
# => {"ID"=>"1234", "Type"=>"CID"}

"#{h['Type']}=#{h['ID']}"
# => "CID=1234"

有没有办法在一个班轮里做到这一点?

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

&是Ruby的安全导航运算符 ,它在Ruby v2.3中首次亮相。 我添加了它,如果h["Type"]上没有匹配项,则将导致返回nil

您可以使用以下命令在一行中完成此操作:

a.select{|x| x['Type']=='CID'}
  .map{|x| "type=#{x['Type']},id=#{x['ID']}"}[0]

您可以尝试以下方法:

如果我们没有Type =“ CID”的多个值:

   a.select{|x| x["Type"] == "CID"}.map{|x| x.values_at("Type", "ID")}.join("=")

如果我们有Type =“ CID”

a.detect{|x| x["Type"]=="CID"}.values_at("Type", "ID").join("=")

如果上面的数组中没有Type =“ CID”,则会抛出错误,请谨慎。

在所有情况下都需要工作,我们需要做:

 a.detect{|x| x["Type"]=="CID"}.values_at("Type", "ID").join("=") if a.detect{|x| x["Type"]=="CID"}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM