Я создаю хэш для представления нескольких записей в базе данных MySQL. Хэш-ключи соответствуют полям идентификатора базы данных, а хэш-значения соответствуют полям имени базы данных.
Что лучше и почему?
Множество
Это работает, но Ruby кажется неэффективным с разреженными массивами, потому что кажется, что есть дополнительные накладные расходы на установку значений всех промежуточных индексов tp
nil
.fruits = [] fruits[23] = "apple" fruits[109] = "orange" # ... fruits[23429] = "banana"
Хэш с fixnum в качестве ключей
Мне это нравится больше всего, но я всегда читал, что лучше всего использовать символы в качестве ключей в хеше. Так же хорошо использовать fixnums как ключи в хэше? Я не уверен, так ли это, но я думаю, что
34.hash
из-за природы fixnums, то есть34.equal? 34
верно, тогда как"hi".equal? "hi"
ложно.fruits = { 23 => "apple", 109 => "orange", # ... 23429 => "banana" }
Хэш с интернированными строковыми представлениями fixnums в качестве ключей
Преобразовывая фиксированные числа в строки, а затем в символы, я могу использовать символы в качестве ключей. Однако это преобразование раздражает, и кто-то однажды сказал мне, что интернирование строк неэффективно. Это так? Они просто кажутся мне уродливыми.
fruits = { :"23" => "apple", :"109" => "orange", # ... :"23429" => "banana" }
Хэш с символами в качестве ключей
Я могу получить более красивые символы (а также использовать новый синтаксис хэшей Ruby 1.9), добавляя к каждой клавише префикс альфа-символа, но это решение также требует преобразования.
fruits = { i23: "apple", i109: "orange", # ... i23429: "banana" }