2011-10-04 2 views
0
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을 반환하려면 어떻게해야합니까? 레일 헬퍼를 사용하여이 작업을 수행하려고합니다.해시를 배열, 주 및 약어로 어떻게 가져올 수 있습니까?

답변

1

이것은

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

귀하의 데이터, 아마도하지만, {약어 => 전체 이름} 쌍의 해시로 더 구조화 된 것 할 것입니다.

2

먼저 배열 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'] %> 
관련 문제