gpt4 book ai didi

ruby - 使用 Ruby 合并和更新 Redis 中的哈希键

转载 作者:可可西里 更新时间:2023-11-01 11:13:35 25 4
gpt4 key购买 nike

我有一个包含以下哈希值的列表:

{
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 以检查 key 是否存在并更新或插入它们?

最佳答案

最好的方法是将 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 } }

这段代码假定 h1h2 中的键总是包含一个带有整数键的散列。

关于ruby - 使用 Ruby 合并和更新 Redis 中的哈希键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26881268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com