gpt4 book ai didi

arrays - Swift 中的 "cons"运算符/函数/方法在哪里?

转载 作者:可可西里 更新时间:2023-11-01 00:51:30 26 4
gpt4 key购买 nike

许多函数式语言都有一个 cons operator .它在恒定时间内返回不可变列表或类似数组的结果,并在末尾 append 一个新元素。

作为伪代码示例,[1,2] : 3 的计算结果为 [1,2,3]

Swift 有 append在摊销常数时间内将元素添加到 Array(有一些注意事项)。但是,append 需要一个可变的Array。我可以从一个不可变的Array创建一个可变的Array,然后append,但我很惊讶似乎没有一个现有的函数或运算符可以为我做这件事并提供摊销的恒定时间保证(未共享的地方)。

最佳答案

这不是 cons 运算符本身,但您可以对数组使用 + 运算符,将数组追加或添加到可变或不可变数组上构造函数样式";用连接的结果构造一个新数组。

来自 the Swift Language Guide - Collection Types :

Creating an Array by Adding Two Arrays Together

You can create a new array by adding together two existing arrays with compatible types with the addition operator (+). The new array’s type is inferred from the type of the two arrays you add together:

...

即,

let foo = [1, 2]
let bar = foo + [3] // [1, 2, 3], "cons(foo, 3)"
let baz = [-1, 0] + bar // [-1, 0, 1, 2, 3], "cons([-1, 0], bar)"

但是请注意,这不会在分摊常数时间内运行,因为我们需要分配新内存并将结果复制到其中。然而,由于数组在 Swift 中是值类型,我看不出对不可变数组的任何操作——比如我们创建一个新的不可变数组——如何在恒定时间内运行,因为我们总是需要为此进行复制(即使有时这可能会懒惰地执行)。

因此,上述的性能应该与使用 .append/.appendContentsOf 在现有可变对象上构造数组没有区别一个然后复制;前一步以分摊常数时间运行(由于数组空间的预分配呈指数增长),但后一步以线性时间运行。

关于arrays - Swift 中的 "cons"运算符/函数/方法在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36999006/

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