Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在哈希数组中组合两个哈希键的值_Ruby - Fatal编程技术网

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