我在代码大战中正在研究this exercise,这是为了展平数组(最多一层),例如,我想得到输出:
[1,2,3] >> [1,2,3]
[[1,2],3] >> [1,2,3]
[[1,[2]],3] >> [1,[2],3]
我决定使用“inject” - 如果该元素是一个数组,则将下一个元素添加到运行总计中,如果不是则将其推送到其中:
def flatten(array)
array.inject([]) {|result,element| element.kind_of?(Array) result.concat(element) : result<<element}
end
任何人都可以帮忙解释为什么我会收到以下语法错误吗?
-e:3: syntax error, unexpected tIDENTIFIER, expecting '}'
... element.kind_of?(Array) result.concat(element) : result<
答案 0 :(得分:3)
您遇到错误,因为您错过了三位声明中的?
:
element.kind_of?(Array) ? result.concat(element) : result<<element
为了您的目标,您可以将Array#flatten
与参数一起使用:
array.flatten(1)
[[1,2],3].flatten(1)
=> [1, 2, 3]
[[1,[2]],3].flatten(1)
=> [1, [2], 3]