ruby - 如何用国家宝石列出所有大陆?
问题描述
使用国家宝石https://github.com/hexorx/countries
我们有方法:
ISO3166::Country.find_all_countries_by_continent('Europe')
我们还有:
ISO3166::Country.countries
但我们没有:
ISO3166::Country.continents
我想要一个select
可以使用 I18n 翻译的“按大陆过滤”。
有没有一种简单的方法可以获取所有可用的大陆?
解决方案
您可以使用所有大陆
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(用于翻译国家/地区)似乎没有提供大陆名称的翻译,因此这可能会落在您的肩上来维护。
ASet
也可能使这稍微更有效率:(尽管因为获取大陆只是Array
遍历和Hash
查找,所以它已经相当快了)
ISO3166::CONTINENTS = ISO3166::Data.cache.each_with_object(Set.new) do |(_,v),s|
s.add(v['continent'])
end.sort
推荐阅读
- scala - 在 sparkdataframe 中添加列
- visual-studio-code - 在 vscode 中使用与 `prettier.config.js` 不同的多行缩进设置更漂亮
- oracle - 当其中一个有附加列时,如何在视图上使用联合
- dart - 如何等待 ValueChanged?
- python - 为什么函数定义行有很大的内存增量?
- r - 为每一列连接选定行的字符串
- sql - SQL中的URL解析
- excel - VBA DOM getElementsBy无法获取子节点
- r - 如何计算R中的对象(变量)和组(两个变量)之间的距离矩阵
- node.js - 猫鼬:$inc 不递增