Ruby将可枚举数组展平为多个子阵列?

Noz*_*Noz 0 ruby arrays enumerable

我有以下代码:

>[['string', 'User'], Foo.all.map {|c| ["number", c.name]}, ['number', 'Average Time']]
=> [["string", "User"], [["number", "Bar1"], ["number", "Bar2"], ["number", "Bar3"]], ["datetime", "Average Time"]]
Run Code Online (Sandbox Code Playgroud)

我想做的是将传递的Foo可枚举数组简化为:

=> [["string", "User"], ["number", "Bar1"], ["number", "Bar2"], ["number", "Bar3"], ["datetime", "Average Time"]]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但是它没有做我想要的事情:

>[['string', 'User'], Foo.all.map {|c| ["number", c.name]}.flatten, ['number', 'Average Time']]
=> [["string", "User"], ["number", "Bar1", "number", "Bar2", "number", "Bar3"], ["datetime", "Average Time"]]
Run Code Online (Sandbox Code Playgroud)

请注意,在测试时,您可以使用示例输出演示替换Fool.all.map部件[["number", "Bar1"], ["number", "Bar2"], ["number", "Bar3"]].

tok*_*and 5

使用splat运算符:

[
  ['string', 'User'], 
  *Foo.all.map { |c| ["number", c.name] }, 
  ['number', 'Average Time'],
]
Run Code Online (Sandbox Code Playgroud)

  • `*`爆炸一个数组,基本上删除了周围的`[...]`.把它想象成"抓住这个阵列的胆量,把它们粘在这里".在其他语言中,它将"使用此指针引用的内容",因此以这种方式思考可能会有所帮助. (3认同)