Короче говоря, выше ли стоимость (по времени и процессору) для вызова kind_of? дважды или создать новый массив с одним значением, а затем повторить его? В «предыстории» ниже просто подробно объясняется, почему я должен это знать, но это не обязательно чтение, чтобы ответить на вопрос.
Предыстория :
У меня есть куча данных о местоположении. Пары широта / долгота и название места, которое они представляют. Мне нужно отсортировать эти значения широты / долготы по расстоянию от другой пары широта / долгота, предоставленной пользователем. Я должен рассчитать расстояния на лету, а они не известны раньше.
Я думал, что было бы легко сделать это, добавив карту distance => placename
в хеш, затем получить набор ключей и отсортировать их, а затем считать значения в этом порядке. Тем не менее, существует вероятность того, что два расстояния будут равны, что сделает два ключа равными друг другу.
Я придумал два решения для этого, либо я отображаю
if hash.has_key?(distance)
hash[distance].kind_of? Array
? hash[distance] << placename
: hash.merge!({distance => [hash[distance], placename]})
else
hash.merge!({distance => placename})
end
тогда при чтении значений проверяю
hash[distance] kind_of? Array ? grab the placename : iterate through hash and grab all placenames
каждый раз. Или я мог бы сделать каждое значение массивом с самого начала, даже если оно имеет только одно место.