簡體   English   中英

將哈希與另一個哈希合並

[英]Merge hash with another hash

我有兩個像

h1 = {
  DateTime.new(2015, 7, 1),in_time_zone => 0,
  DateTime.new(2015, 7, 2).in_time_zone => 10, 
  DateTime.new(2015, 7, 4).in_time_zone => 20, 
  DateTime.new(2015, 7, 5).in_time_zone => 5
}

h2 = {
  DateTime.new(2015, 7, 1).in_time_zone => 0,
  DateTime.new(2015, 7, 2).in_time_zone => 0,
  DateTime.new(2015, 7, 3).in_time_zone => 0
}

我想合並h1h2 ,如果密鑰已經存在,則不要合並,因此結果看起來像(為縮短日期范圍的datetime格式,以提高可讀性)

result
#=> {
#     Wed, 01 Jul 2015 01:00:00 EST +01:00 => 0,
#     Thu, 02 Jul 2015 01:00:00 EST +01:00 => 10,
#     Fri, 03 Jul 2015 01:00:00 EST +01:00 => 0,
#     Sat, 04 Jul 2015 01:00:00 EST +01:00 => 20,
#     Sun, 05 Jul 2015 01:00:00 EST +01:00 => 5
#   }

我已經嘗試過h1.merge(h2)h2.merge(h1)但是可以將h2鍵和值放到h1

arr = []
h = h1.merge(h2)
h.each{|k, v| arr.include?(v) ? h.delete(k) : arr << v }

#=> {#<DateTime: 2015-07-01T00:00:00+00:00 ((2457205j,0s,0n),+0s,2299161j)>=>0,
     #<DateTime: 2015-07-04T00:00:00+00:00 ((2457208j,0s,0n),+0s,2299161j)>=>20,
     #<DateTime: 2015-07-05T00:00:00+00:00 ((2457209j,0s,0n),+0s,2299161j)>=>5}

您將只有3個鍵/值對,而不是您期望的5個,因為Ruby中的哈希是唯一鍵及其值的集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM