首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将散列转换为数组、状态和首字母缩写?

如何将散列转换为数组、状态和首字母缩写?
EN

Stack Overflow用户
提问于 2011-10-04 09:13:11
回答 2查看 112关注 0票数 0
代码语言:javascript
复制
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帮助器来完成此任务。

EN

回答 2

Stack Overflow用户

发布于 2011-10-04 09:41:31

首先,您不希望将数组命名为Array,因为这是一个类名,并且它已经被占用。

你可以这样做:

代码语言:javascript
复制
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

在你的雇员再培训局:

代码语言:javascript
复制
<%= find_acronym_in(@acronyms, 'ES') %>

这是一个简单的线性搜索,所以对于大的列表,它会很慢,但是对于短的列表,它可能不会被注意到。

如果你经常这样做,或者你有很大的列表,那么你可以在你的控制器中把你的数组重新排列成一个简单的Hash:

代码语言:javascript
复制
@acronyms_hash = @acronyms.each_with_object({ }) { |h, memo| memo[h[:acronym]] = h[:fullname] }

然后根据需要从Hash中提取内容:

代码语言:javascript
复制
<%= @acronyms_hash['ES'] %>
票数 2
EN

Stack Overflow用户

发布于 2011-10-04 09:38:11

这个就行了

代码语言:javascript
复制
acronym_to_find = "SE"
Array.select { |ac| ac[:acronym] == acronym_to_find }.first[:fullname]

不过,将您的数据组织为{ => fullname}对的散列可能会更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7642356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档