在红宝石中一步展平阵列

时间:2016-05-18 20:05:01

标签: arrays ruby

我在代码大战中正在研究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<

1 个答案:

答案 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]