Как преобразовать целое число ruby ​​в символ

У меня есть массив Ruby, подобный этому

q_id = [1,2,3,4,5,...,100]

Я хочу перебирать массив и преобразовывать в хеш, как это

{
  :1 => { #some hash} ,  
  :2 => { #another hash},
  ...
  :100 => {#yet another hash}
}

Каков самый короткий и самый элегантный способ сделать это?

[EDIT: to_s.to_sym, будучи удобной, не так, как я этого хочу. Извините, что не упомянул об этом раньше.]

Ответы

Ответ 1

Для создания символа любая из этих работ:

42.to_s.to_sym
:"#{42}"

Представленное представление #inspect показывает :"42" только потому, что :42 не является допустимым символьным символом. Будьте уверены, что двойные кавычки не являются частью самого символа.

Чтобы создать хеш, нет причин для преобразования ключей в символы. Вы должны просто сделать это:

q_id = (1..100).to_a
my_hash_indexed_by_value = {}
q_id.each{ |val| my_hash_indexed_by_value[val] = {} }

Или это:

my_hash = Hash[ *q_id.map{ |v| [v,{}] }.flatten ]

Или это:

# Every time a previously-absent key is indexed, assign and return a new hash
my_hash = Hash.new{ |h,val| h[val] = {} }

Со всеми этими функциями вы можете сразу индексировать свой хеш с помощью целого числа и получить уникальный хэш назад, например.

my_hash[42][:foo] = "bar"

В отличие от JavaScript, где каждый ключ к объекту должен быть строкой, хеши в Ruby принимают любой объект в качестве ключа.

Ответ 2

Чтобы перевести целое число в символ, используйте to_s.to_sym... например,:

1.to_s.to_sym

Обратите внимание, что символ больше связан с строкой, чем с целым числом. Возможно, это не так полезно для таких вещей, как сортировка.

Ответ 3

Как уже было сказано, 1 не является допустимым символом. Здесь один из способов сделать то, что вы хотите, но с ключами как строки:

Hash[a.collect{|n| [n.to_s, {}] }]

Ответ 4

Массив объектов, которые вы хотите в своем хеше, будет намного проще в использовании, не так ли? Даже хэш целых чисел будет работать очень хорошо, не так ли?

Ответ 5

u может использовать 1.to_s.to_sym

но это сделает такие символы, как: "1"

Ответ 6

Фактически "номера символов" не являются вещами в Ruby (попробуйте вызвать метод to_sym для числа). Преимущество использования символов в хэше - это производительность, так как они всегда имеют один и тот же object_id (попробуйте вызвать object_id для строк, букв, чисел и символов).

Числа являются непосредственными значениями, и, как и объекты Symbol, они всегда имеют один и тот же объект object_id.

В любом случае использование нового синтаксиса хэша подразумевает использование символов в качестве ключей, но вы всегда можете использовать старый хороший синтаксис "хэш-ракета"

awesome_hash = { 1 => "hello", 2 => "my friend" }

Ознакомьтесь с ближайшими значениями здесь:

https://books.google.de/books?id=jcUbTcr5XWwC&pg=PA73&lpg=PA73&dq=immediate+values+singleton+method&source=bl&ots=fIFlAe8xjy&sig=j7WgTA1Cft0WrHwq40YdTA50wk0&hl=en&sa=X&ei=0kHSUKCVB-bW0gHRxoHQAg&redir_esc=y#v=onepage&q&f=false