У меня есть хеш Ruby, который выглядит так:
h = {"side1"=>["green", "Green"], "side2"=>["verde", "Verde"]}
Как я могу получить первый (или последний) элемент по определенному ключу в хеше?
У меня есть хеш Ruby, который выглядит так:
h = {"side1"=>["green", "Green"], "side2"=>["verde", "Verde"]}
Как я могу получить первый (или последний) элемент по определенному ключу в хеше?
Собственно, ваш пример псевдокода в вашем вопросе правильный.
Для вашего хеша
h = {
"side1" => ["green", "Green"],
"side2" => ["verde", "Verde"]
}
ключи 'side1'
и 'side2'
(с их значениями справа от хеш-ключа)
Итак, h['side2'].first
говорит, что для значения ключа 'side2'
получить первый элемент в значении ["verde", "Verde"]
, который является массивом. h['side2'][0]
также будет работать. псевдоним first
является удобным методом.
Чтобы получить последний элемент массива, не зная, насколько он большой, используйте отрицательный индекс. например h['side2'][-1]
, что в этом случае эквивалентно h['side2'][1]
.
Обратите внимание, что ключи в хеше относятся к тому, является ли это строкой или символом. То есть h[:side2]
возвращает nil, поскольку ключ не был установлен. Rails имеет класс HashWithIndifferentAccess
, который обрабатывает символы и строки как эквивалентные ключи.
ИЗМЕНИТЬ
Я должен был упомянуть, что я протестировал свой ответ в irb
. irb
- отличный способ проверить ваши идеи о том, что может и может не работать. В командной строке терминала введите irb
, введите и воспроизведите с рубином.
Я столкнулся с аналогичной ситуацией, когда я произвольно хотел получить первую запись из хэша для некоторого тестового кода. Это не совсем то, о чем этот вопрос, но он появился в поиске, который я побежал так, что он мог бы сделать то же самое и для других.
Конечно, "первый элемент" произволен в хеше, но метод keys возвращает список всех ключей, отсортированных по какой-то магии. Если вам нравится этот порядок сортировки, вы можете получить "первый" метод с помощью
h[h.keys.first]
Любой хеш имеет ключи и значения вы можете просто сделать
hash.values.first
hash.values.last
hash.keys.first
hash.keys.last
Таким образом, у вас будет массив значений, которые вы хотите в случае первого или последнего
Да. puts h["side2"].first
должен работать. Думаю, это говорит о том, что Ruby следует принципу наименьшего удивления, где ваш псевдокод оказался таким же, как и фактический код.: -)