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

标签 arrays swift append cons

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

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

Swift 有 append在摊销常数时间内向Array添加一个元素(有一些注意事项)。但是,append 需要一个可变的Array。我可以从不可变的数组创建一个可变的数组,然后追加,但令我感到非常惊讶的是,似乎没有现有的函数或运算符可以为我执行此操作并提供摊销恒定时间保证(如果不共享)。

最佳答案

这本身不是 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/

相关文章:

javascript - 在 jquery 选择的插件中动态添加新选项,其中选择多个

python - 似乎append()添加了变量而不是它们的值

java - Java SystemClock.uptimeMillis() 的 Objective C/Swift 版本

Java 简单彩票程序

c - C 如何知道赋值后一个 char* 有多长?

PHP Foreach 循环打印所有表情符号

objective-c - 通过 AVCaptureSession 视频输出了解 Metal 用法

iOS 从云存储中选择图像

javascript - jQuery thead 对象不能 append tr 对象

c - 使用 C 根据对象之间已知的相似性快速对对象数组进行排序