我有一个哈希,如下所示:
hash_ex = {:"p, q," => "1, 2,"}
并hash_ex[:p]
返回nil
:
hash_ex[:p]
# => nil
相反,它应该是1
。我怎样才能获得这个关键值?
答案 0 :(得分:2)
:p
中没有已定义的键hash_ex
。因此nil
是预期的结果。
hash_ex = {:"p, q,"=>"1, 2,"}
hash_ex.keys
# => [:"p, q,"]
hash_ex[:"p, q,"]
# => "1, 2,"
上面的示例显示您已将"p, q,"
声明为关键字。此处"p, q,"
此处被视为符号而非字符串。因此,hash_ex["p, q,"]
也会返回nil
。
答案 1 :(得分:1)
但
hash_ex[:p]
会返回nil
,而应该是1
Ruby不是AI,它无法弄清楚如何解析“自定义哈希格式”。
我将如何获得此关键值?
好吧,你必须将你的格式转换成Ruby理解的结构:
key_string = "p, q,"
value_string = "1, 2,"
keys = key_string.split(/,\s*/).map(&:to_sym) #=> [:p, :q]
values = value_string.split(/,\s*/).map(&:to_i) #=> [1, 2]
hash_ex = keys.zip(values).to_h
hash_ex[:p] #=> 1