在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中,哈希中元素的顺序必须很强。)
答案 0 :(得分:0)
这可能是可能的,但不是像Python中那样直截了当。那是因为密钥将在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中,哈希可以用键映射为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"
可以有效地用作关键。