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