【问题标题】:How can i get a hash into an array, state and acronym?如何将散列放入数组、状态和首字母缩写词?
【发布时间】:2011-10-04 01:13:10
【问题描述】:
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 助手来做到这一点。

【问题讨论】:

    标签: ruby ruby-on-rails-3 state helper acronym


    【解决方案1】:

    首先你不想调用你的数组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'] %>
    

    【讨论】:

      【解决方案2】:

      这样就可以了

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

      不过,您的数据可能会更好地结构化为 { acronym => fullname} 对的哈希。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-21
        • 2022-01-21
        • 2020-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多