簡體   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