我列出了以下哈希:
{
key_main1: {
k1: 1,
k2: 11,
k3: 33,
k4: 146,
k5: 12,
# etc
},
key_main2: {
k1: 1,
k2: 11,
k3: 33,
k4: 146,
k5: 12,
# etc
},
# etc
}
以json格式保存在redis中:
redis_key1 = "redis_key1"
redis.set("redis_key", my_hash.to_json)
redis.get("redis_key") # =>
"{"key_main":{"k1":1,"k2":11,"k3":33,"k4":146,"k5":12}}"
哈希具有相同的结构,但可以有不同的键。在每次迭代中,我想通过总结“k”或/的值来更新现有密钥,并插入不存在的密钥: 所以列表中的第二个哈希看起来像这个
{
key_main1: {
k3: 44,
k4: 14,
k18: 99
},
key_main3: {
k2: 77
}
}
然后在秒迭代之后,Redis中的结果将如下所示:
{
key_main1: {
k1: 1,
k2: 11,
k3: 33,
k4: 160,
k5: 12,
k18: 99
},
key_main2: {
k1: 1,
k2: 11,
k3: 33,
k4: 146,
k5: 12
},
key_main3: {
k2: 77
}
}
最简单和最佳方式是什么?我是否必须在每次迭代中解析(恢复)json以检查密钥是否存在并更新或插入它们?
答案 0 :(得分:2)
最好的方法是将JSON解析为哈希值,否则你将很难弄清楚如何组合哈希值。
要合并它们,最好也是最简单的是Hash#merge:
h1 = { m1: { k1: 10, k2: 20, k3: 30 }, m2: { k1: 11, k2: 12 } }
h2 = { m1: { k1: 500, k2: 5, k4: 40 }, m3: { k2: 123 } }
pp h1.merge(h2) { |key, v1, v2|
v1.merge(v2) { |key, v1, v2| v1 + v2 }
}
=> { :m1 => { :k1 => 510,:k2 => 25, :k3 => 30, :k4 => 40 },
:m2 => { :k1 => 11, :k2 => 12},
:m3 => { :k2 => 123 } }
此代码假定h1
和h2
中的键始终包含带整数键的哈希。