arrays - 如何在 Ruby 中有效地连接多个数组?

标签 arrays ruby concatenation

我只是想在 Ruby 中连接多个数组,但找不到令人满意的方法。

示例输入:

foo = [1, 2, 3]
bar = [4, 5, 6]
baz = [7, 8, 9]

预期结果:(不修改现有数组)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

我的实际数组 大,所以我对有效的解决方案很感兴趣。也可能有三个以上的数组,因此最好使用简短的语法。

到目前为止我尝试了什么

  • foo + bar + baz 是显而易见的,简洁明了。但它被计算为 (foo + bar) + baz。换句话说:它创建了一个中间数组 [1, 2, 3, 4, 5, 6],它在整个操作后被丢弃。如 documentation 中所述:

    repeated use of += on arrays can be quite inefficient

  • [*foo, *bar, *baz] 基本上内联元素,这对于大型数组也不是很有效。在我看来,它也更像是黑客。

  • [foo, bar, baz].flatten(1) 似乎比上面的性能更差。

  • [].concat(foo).concat(bar).concat(baz) 是最快的,但是看起来很麻烦,需要调用多个方法。

这样的基本任务不应该有一个简单的类方法吗?像这样的东西:

Array.concat(foo, bar, baz)

我是否漏掉了一些明显的东西?

最佳答案

如果您已经确定多重连接是最快的方法,您可以使用 reduce 将其编写得更好:

[foo, bar, baz].reduce([], :concat)

关于arrays - 如何在 Ruby 中有效地连接多个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40510579/

相关文章:

c - 通过引用传递数组的两种不同方式。哪一个更正确?

python - 如何创建一个全部为 True 或全部为 False 的 numpy 数组?

java - 如果一切都是对象,为什么我不能交换两个变量?

ruby - "<top (required)>"在 Ruby 堆栈跟踪中意味着什么?

python - 类型错误:只能将列表(不是 "int")连接到列表 4

java - 为什么 Delphi 中的字符串连接比 Java 中更快?

c - 如何将二进制数组转换为其 2 的补码?

php - Laravel 中如何存储数组?

ruby - 无法在 Mac 上解析 zsh 和 oh-my-zsh 的 "rbenv init"指令

python - 连接多个 pandas groupby 输出