Как преобразовать целое число 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