gpt4 book ai didi

ruby - 在redis中使用哈希作为键的可能性

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

在 Python 中:

import redis
db = redis.StrictRedis()
db.set({'test1': 'a', 'test2' : 'b'},1)
print db.get({'test2': 'b', 'test1' : 'a'})
result : 1

我如何在 Ruby 中做到这一点? (我不想使用 JSON,因为在 JSON 中,哈希中元素的顺序必须很强。)

最佳答案

这可能是可能的,但不像在 Python 中那样直截了当。那是因为key会被转换成String,但是不会有任何一种特定的规范化。因此,如果交换键的位置,字符串表示将发生变化。

2.1.5 :001 > r = Redis.current
=> #<Redis client v3.2.1 for redis://127.0.0.1:6379/0>
2.1.5 :002 > r.set({test1: 'a', test2: 'b'}, 1)
=> "OK"
2.1.5 :003 > r.keys
=> ["{:test1=>\"a\", :test2=>\"b\"}"]
2.1.5 :004 > r.get({test2: 'b', test1: 'a'})
=> nil

此外,在 Ruby 中,Hash 可以用键映射为 String 或 Symbol,返回不同的 to_s 表示。

如果你想使用哈希作为符号,你需要做的是首先对其应用规范化函数。例如:

def to_key(hash)
hash.to_a.sort.map { |pair| "%s:%s" % pair }.join("/")
end

那会转化

{test2: 'b', test1: 'a'}
{test1: 'a', test2: 'b'}
{"test1" => 'a', "test2" => 'b'}
...

进入

"test1:a/test2:b"

可以有效地用作键。

关于ruby - 在redis中使用哈希作为键的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872862/

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