ruby 中数组的一步展平

use*_*959 2 ruby arrays

我正在 codewars 中进行这个练习,即展平数组(最多一层深),例如,我想获得输出:

[1,2,3] >> [1,2,3]

[[1,2],3] >> [1,2,3]

[[1,[2]],3] >> [1,[2],3]
Run Code Online (Sandbox Code Playgroud)

我决定使用“注入” - 如果该元素是数组,则下一个元素将添加到运行总数中,如果不是,则直接推送:

def flatten(array)
  array.inject([]) {|result,element| element.kind_of?(Array) result.concat(element) : result<<element}
end
Run Code Online (Sandbox Code Playgroud)

谁能帮助解释为什么我收到以下语法错误?

-e:3: syntax error, unexpected tIDENTIFIER, expecting '}'
... element.kind_of?(Array) result.concat(element) : result<
Run Code Online (Sandbox Code Playgroud)

Ily*_*lya 7

?由于您错过了三元语句,因此出现错误:

element.kind_of?(Array) ? result.concat(element) : result<<element
Run Code Online (Sandbox Code Playgroud)

为了您的目标,您可以使用Array#flatten参数:

array.flatten(1)
[[1,2],3].flatten(1)
=> [1, 2, 3]
[[1,[2]],3].flatten(1)
=> [1, [2], 3]
Run Code Online (Sandbox Code Playgroud)