如何用国家宝石列出所有大陆?

问题描述

使用国家宝石 https://github.com/hexorx/countries

我们有方法

ISO3166::Country.find_all_countries_by_continent('Europe')

我们还有: ISO3166::Country.countries

但我们没有: ISO3166::Country.continents

我想要一个可以使用 I18n 进行翻译的“按大陆过滤”select

是否有一种简单的方法可以获取所有可用的大陆?

解决方法

据我所知(我可能是错的),我认为 hexorx/countries 本身不会给你这种可能性。

附: 如果它可以使事情发生,我已经为此创建了一个 feature request

,

您可以使用

获得所有大陆
ISO3166::Data.cache.map {|_,v| v['continent']}.uniq
#=> ["Asia","North America","Africa","Europe","South America","Antarctica","Australia"]

由于此列表在可预见的未来极不可能发生变化,因此您可以自行缓存这些结果

ISO3166::CONTINENTS = ISO3166::Data.cache.map {|_,v| v['continent']}.uniq.sort

然后您可以在任何需要的地方重复使用常量 ISO3166::CONTINENTS

话虽如此,i18n_data gem(用于翻译国家/地区)似乎并未提供大洲名称的翻译,因此您可能需要自行维护。

Set 也可能稍微提高效率:(虽然因为获取大陆只是简单的 Array 遍历和 Hash 查找,所以它已经相当快了)

ISO3166::CONTINENTS = ISO3166::Data.cache.each_with_object(Set.new)  do |(_,v),s| 
  s.add(v['continent'])
end.sort

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...