首页 > 解决方案 > 如何用国家宝石列出所有大陆?

问题描述

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

我们有方法:

ISO3166::Country.find_all_countries_by_continent('Europe')

我们还有: ISO3166::Country.countries

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

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

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

标签: rubycountries

解决方案


您可以使用所有大陆

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_datagem(用于翻译国家/地区)似乎没有提供大陆名称的翻译,因此这可能会落在您的肩上来维护。

ASet也可能使这稍微更有效率:(尽管因为获取大陆只是Array遍历和Hash查找,所以它已经相当快了)

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

推荐阅读