Ruby:根据数值替换数组中的元素

Thi*_*ent 1 ruby arrays

我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)

这个代码有两个问题:

  1. 我不知道这是使用一个Ruby的方式blockdo end.

  2. 这段代码不是DRY,我相信我可以使用一组三个case循环,一个用于大陆,一个用于国家,一个用于城市.

Ser*_*sev 8

这是一个更好的方法

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)