如何将ruby整数转换为符号

pap*_*del 16 ruby

我有一个像这样的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接受任何对象作为键.