我已经看到了来自不同语言的几个示例,这些示例明确地证明了连接列表(数组)的元素比仅连接字符串要快几倍。不幸的是我找不到原因的解释?
有人可以解释在两种操作下都有效的内部算法吗,为什么一个算法比另一个算法快。
这是我的意思的python示例:
# This is slow
x = 'a'
x += 'b'
...
x += 'z'
# This is fast
x = ['a', 'b', ... 'z']
x = ''.join(x)
谢谢是提前)
最佳答案
join函数中的代码预先知道要连接的所有字符串以及这些字符串的大小,因此它可以在开始操作之前计算最终的字符串长度。因此,它只需要为最终字符串分配一次内存,然后就可以将每个源字符串(和定界符)放置在内存中的正确位置。
另一方面,对一个字符串执行单个+ =操作只能选择为最后一个字符串分配足够的内存,而这只是两个字符串的串联。随后的+ =必须执行相同的操作,每个分配的内存将在下一个+ =处丢弃。每次将不断增长的字符串从内存中的一个位置复制到另一个位置时。
关于javascript - 为什么加入要比普通串联快,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2324963/