如何使用可能的多个元素替换数组中的一个元素?

时间:2017-02-06 22:46:23

标签: arrays ruby

我想替换数组中的项目:

arr = ["55", "4.ARTHUR", "masddf"]

可能有多个项目,具体取决于它是否与正则表达式匹配。我想得到结果:

["55", "4.", "ARTHUR", "masddf"]

我试过了:

arr.map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? } : o }
# => ["55", ["4.", "ARTHUR"], "masddf"]

arr.map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? }.flatten : o }
# => ["55", ["4.", "ARTHUR"], "masddf"]

我似乎无法将它们分成的数组外部的元素。 有什么想法吗?

1 个答案:

答案 0 :(得分:3)

改为使用flat_map

arr = ["55", "4.ARTHUR", "masddf"]
arr.flat_map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? } : o }
# => ["55", "4.", "ARTHUR", "masddf"]

在repl.it上查看:https://repl.it/F90V

顺便说一下,解决此问题的一种更简单的方法是使用String#scan

arr.flat_map {|o| o.scan(/^\d+\.|.+/) }

在repl.it上查看:https://repl.it/F90V/1