如何根据ruby中的条件加入一些(不是全部)数组元素?

Art*_*akk 2 ruby arrays string

假设我有一个像这样的字符串数组:

array = ["foo", "(bar)", "baaz", "quux", "herp", "(derp)"]
Run Code Online (Sandbox Code Playgroud)

我需要加入以"("与前一项开头的项目,以获得如下输出:

["foo (bar)", "baaz", "quux", "herp (derp)"]
Run Code Online (Sandbox Code Playgroud)

我想它必须是得到匹配的数组项索引,/^\(/然后迭代块中的原始数组,连接项目index-1..index,并删除atindex

saw*_*awa 5

array.slice_before{|s| !s.start_with?("(")}.map{|a| a.join(" ")}
# => ["foo (bar)", "baaz", "quux", "herp (derp)"]
Run Code Online (Sandbox Code Playgroud)


Uri*_*ssi 5

从另一个方向看它 - 连接整个字符串,然后沿着它们后面没有的空格拆分它(

array.join(' ').split(/ (?!\()/)
# => ["foo (bar)", "baaz", "quux", "herp (derp)"]
Run Code Online (Sandbox Code Playgroud)

  • 如果某些元素包含空格,这将不起作用。sawa的方法更好。 (3认同)