gpt4 book ai didi

ruby - 为什么 Ruby 的 splat 在组合数组时比使用 + 组合数组慢?

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:25 28 4
gpt4 key购买 nike

我大胆猜测将一个数组拼成另一个数组比将两个数组加在一起更快,但经过快速基准测试后我发现我错了。我假设解释器只会将 splat 转换为数组文字,而不必每次都对其调用 + 方法。那么,为什么 + 比 splat 更快?

我使用了这个基准代码:

def test(trials = 1000)
head = [1,2,3]
tail = 100.times.to_a

t = Time.now.to_f
trials.times do |i|
a = [head, *tail]
end
puts "splat done in #{Time.now.to_f - t}"

t = Time.now.to_f
trials.times do |i|
a = head + tail
end
puts "+ done in #{Time.now.to_f - t}"
end

我得到了这个结果:

2.2.5 :059 > test
splat done in 0.001013040542602539
+ done in 0.0009138584136962891

增加试验:

2.2.5 :061 > test 1_000_000
splat done in 0.5123062133789062
+ done in 0.4400749206542969

它非常接近但始终稍快一些。

最佳答案

为什么一个标准库或核心功能比另一个慢?
因为它取决于提供给它的类型和/或数据。

Splat 并不总是与数组有关。它可以采用 nil 并将其作为一个空数组进行处理——这里您已经有了一些条件行为,而数组的连接不是有条件的而是直接的。

关于ruby - 为什么 Ruby 的 splat 在组合数组时比使用 + 组合数组慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37888110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com