我DID检查这个问题,以及其他类似的问题,它们都没有提供用多个测试值替换数组元素的解决方案.
我有一个Ruby数组:
array = ["america", "europe", "asia", "africa", "france", "usa", "spain", "paris", "los angeles"]
Run Code Online (Sandbox Code Playgroud)
我想转换这个数组,以获得以下结果:
array = ["continent", "continent", "continent", "continent", "country", "country", "country", "city", "city"]
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是做那样的事情:
array.collect! do |element|
(element == "america") ? "continent" : element
(element == "europe") ? "continent" : element
(element == "asia") ? "continent" : element
(element == "africa") ? "continent" : element
(element == "france") ? "country" : element
(element == "usa") ? "country" : element
(element == "spain") ? "country" : element
(element == "paris") ? "city" : element
(element == "los angeles") ? "city" : element
end
Run Code Online (Sandbox Code Playgroud)
这个代码有两个问题:
我不知道这是使用一个Ruby的方式block用do end.
这段代码不是DRY,我相信我可以使用一组三个case循环,一个用于大陆,一个用于国家,一个用于城市.
这是一个更好的方法
array.collect! do |element|
case element
when 'america', 'europe', 'asia', 'africa'
'continent'
when 'france', 'spain'
'country'
when 'paris', 'los angeles'
'city'
else
element
end
end
Run Code Online (Sandbox Code Playgroud)