a = ["Bob Green", "Don Brown", "Rich Freedom"]
a_hash = {"key_name" =>{"name" => "a_name", "a_thing" => 0}}
keys = a_hash.keys
for i in 0..a.length
aCOG = a[i]
aCOGkey = a[i].to_s.downcase.delete(' ')
keys[i] = aCOGkey
a_hash[keys[i]]["name"] = aCOG #why does this line fail?
end
回答
写一个新的键值对哈希内的哈希能像这样工作:
outer_hash['inner_hash_key']['new_key_in_inner_hash'] = 'String I want to add'.
让我们来看看:
keys[0] == aCOGkey == a[0] == "bobgreen"
貌似是线路出现故障时,因为没有钥匙“bobgreen “在a_hash
。
虽然会创建一个新条目,不是吗? –
自从我使用Ruby之后已经有一段时间了,我现在无法测试它,但是我很确定在创建'a_hash [keys [i]]'之前尝试访问'name'会导致它崩溃。 –
嵌套哈希不只是自己创建。换句话说,Ruby并不知道密钥的值也是一个哈希值。
你可以使用所有方法上面具体分配的散列,或者可以使用
a_hash = Hash.new { |h,k| h[k] = {} }
这假定在a_hash
所有值是散列(嵌套散列)。此方法可以将默认值设置为散列。您也可以设置h[k] = {name:"",a_thing:0}
。
所以你只需要做这样的:
a = ["Bob Green", "Don Brown", "Rich Freedom"]
a_hash = Hash.new { |h,k| h[k] = {} }
a.each{|n| a_hash[n.to_s.downcase.delete(' ')]["name"] = n}
尽量不要在Ruby中使用for
。改用枚举数。 使用符号作为散列键。
“使用散列键的符号”,当它有意义时。多用途地尝试使用符号作为散列键可能令人沮丧,因为有时候这个键太复杂而不能成为符号。 –
什么时候有道理?参考:http://stackoverflow.com/questions/8189416/why-use-symbols-as-hash-keys-in-ruby另外,如果你知道你可以用这种方式使用符号,它永远不会太复杂':“这是一个复杂的符号”' – texasbruce
散列键不一定是一个字符串。它可以是任何对象。尝试将所有可以想象的对象转换为符号。他们不适合。所以,虽然使用符号来表示速度和内存是一种很好的做法,但并不总是有利的,并且并不总是会导致最易读的代码,即投票能够承受。 –
- 1. 如何将字符串转换为散列或将其添加到散列
- 2. 如何使用Ruby将嵌套字符串散列转换为符号散列?
- 3. Ruby将字符串转换为散列
- 4. 将方法中的散列参数或字符串参数添加到散列(Ruby)
- 5. Ruby如何将元素添加到元素来散列,返回散列?
- 6. 如何将散列元素添加到另一个散列?
- 7. Ruby修改并在散列数组中添加散列值
- 8. 将字符串添加到散列值的末尾
- 9. 添加散列到散列(红宝石)
- 10. C#:如何散列字符串到RIPEMD160
- 11. 如何将散列添加到数组?
- 12. 将散列添加到散列数组如果不为空?
- 13. SHA512散列到C#中的字符串
- 14. 将值添加到perl中的散列
- 15. 字符串的散列码
- 16. perl:将散列对添加到较大的散列
- 17. 如何将字符串散列到[0:1]中的浮点数?
- 18. Ruby - 如何将数组添加到散列键?
- 19. 如何在Rust中的散列表中追加字符串值?
- 20. 如何将一个新的散列附加到散列数组?
- 21. 为什么在向散列添加散列时,Ruby似乎嵌套了添加的散列?
- 22. 将字符串添加到嵌套在散列内部的数组中
- 23. 字符串散列与php
- 24. 字符串散列算法
- 25. MD5散列字符串
- 26. 单向加密,将散列字符串保存到文件中?
- 27. 得到的字符串散列,像hashids
- 28. 在jquery中添加散列
- 29. 如何正确地散列字符串
- 30. 在散列或符号上动态添加散列红宝石
这真的很难确定你在这里做什么。尝试解释什么是故意,失败,错误信息等。另请参阅[常见问题]。 –