我有一个像这样的Ruby数组
q_id = [1,2,3,4,5,...,100]
Run Code Online (Sandbox Code Playgroud)
我想遍历数组并转换成这样的哈希
{
:1 => { #some hash} ,
:2 => { #another hash},
...
:100 => {#yet another hash}
}
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最短和最优雅的方法是什么?
[编辑:to_s.to_sym虽然方便不是我想要它.抱歉不提及它.]
Phr*_*ogz 31
要创建符号,请执行以下任一操作:
42.to_s.to_sym
:"#{42}"
Run Code Online (Sandbox Code Playgroud)
在#inspect这些节目中表示:"42",只是因为:42不是有效的符号文字.请放心,双引号不是符号本身的一部分.
但是,要创建哈希,没有理由将键转换为符号.你应该这样做:
q_id = (1..100).to_a
my_hash_indexed_by_value = {}
q_id.each{ |val| my_hash_indexed_by_value[val] = {} }
Run Code Online (Sandbox Code Playgroud)
或这个:
my_hash = Hash[ *q_id.map{ |v| [v,{}] }.flatten ]
Run Code Online (Sandbox Code Playgroud)
或这个:
# Every time a previously-absent key is indexed, assign and return a new hash
my_hash = Hash.new{ |h,val| h[val] = {} }
Run Code Online (Sandbox Code Playgroud)
通过所有这些,您可以直接使用整数索引哈希并获得唯一的哈希,例如
my_hash[42][:foo] = "bar"
Run Code Online (Sandbox Code Playgroud)
与JavaScript不同,其中对象的每个键都必须是一个字符串,Ruby中的Hashes接受任何对象作为键.
| 归档时间: |
|
| 查看次数: |
12897 次 |
| 最近记录: |