直接从自定义哈希格式获取键值

时间:2015-03-19 10:18:19

标签: ruby hash

我有一个哈希,如下所示:

hash_ex = {:"p, q," => "1, 2,"}

hash_ex[:p]返回nil

hash_ex[:p]
# => nil

相反,它应该是1。我怎样才能获得这个关键值?

2 个答案:

答案 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