Как я могу получить хэш в массив, состояние и аббревиатуру? - PullRequest
0 голосов
/ 04 октября 2011
Array = [{:acronym => "AC", :fullname => "Acre"}, {:acronym => "AL", :fullname => "Alagoas"}, {:acronym => "AP", :fullname => "Amapá"}, {:acronym => "AM", :fullname => "Amazonas"}, {:acronym => "BA", :fullname => "Bahia"}, {:acronym => "CE", :fullname => "Ceará"}, {:acronym => "DF", :fullname => "Distrito Federal"}, {:acronym => "ES", :fullname => "Espírito Santo"}, {:acronym => "GO", :fullname => "Goiás"}, {:acronym => "MA", :fullname => "Maranhão"}, {:acronym => "MT", :fullname => "Mato Grosso"}, {:acronym => "MS", :fullname => "Mato Grosso do Sul"}, {:acronym => "MG", :fullname => "Minas Gerais"}, {:acronym => "PA", :fullname => "Pará"}, {:acronym => "PB", :fullname => "Paraíba"}, {:acronym => "PR", :fullname => "Paraná"}, {:acronym => "PE", :fullname => "Pernambuco"}, {:acronym => "PI", :fullname => "Piauí"}, {:acronym => "RR", :fullname => "Roraima"}, {:acronym => "RO", :fullname => "Rondônia"}, {:acronym => "RJ", :fullname => "Rio de Janeiro"}, {:acronym => "RN", :fullname => "Rio Grande do Norte"}, {:acronym => "RS", :fullname => "Rio Grande do Sul"}, {:acronym => "SC", :fullname => "Santa Catarina"}, {:acronym => "SP", :fullname => "São Paulo"}, {:acronym => "SE", :fullname => "Sergipe"}, {:acronym => "TO", :fullname => "Tocantins"}]

Как я могу сравнить переменную с :acronym и вернуть :fullname в другую переменную?Я пытаюсь сделать это с помощью помощника Rails.

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

Прежде всего, вы не хотите называть свой массив Array, поскольку это имя класса, и оно уже занято.

Вы можете сделать это:

def find_acronym_in(array, acronym)
    # returns nil if we don't find a match.
    array.find { |h| h[:acronym] == acronym }.try(:fetch, :fullname)
end

и в вашем ERB:

<%= find_acronym_in(@acronyms, 'ES') %>

Это простой линейный поиск, поэтому он будет медленным для больших списков, но, вероятно, не будет заметен для коротких списков.

Если вы делаете это много или у вас большие списки, вы можете преобразовать свой массив в простой хэш в вашем контроллере:

@acronyms_hash = @acronyms.each_with_object({ }) { |h, memo| memo[h[:acronym]] = h[:fullname] }

, а затем просто вытаскивайте вещи из хэша по мере необходимости:

<%= @acronyms_hash['ES'] %>
1 голос
/ 04 октября 2011

Это сделает это

acronym_to_find = "SE"
Array.select { |ac| ac[:acronym] == acronym_to_find }.first[:fullname]

Ваши данные, вероятно, будут лучше структурированы как хэш пар {acronym => fullname}.

...