假设我有一个数组,例如:

var myArray = ["Steve", "Bill", "Linus", "Bret"]

然后,我想将一个元素推入/追加到数组的末尾,以获得:

["Steve", "Bill", "Linus", "Bret", "Tim"]

我应该用什么方法呢?

如果我想在数组的前面添加一个元素呢?是否存在常数时不变?


当前回答

如果想追加唯一对象,可以展开数组结构

extension Array where Element: Equatable {
    mutating func appendUniqueObject(object: Generator.Element) {
        if contains(object) == false {
            append(object)
        }
    }
}

其他回答

你可以用

Myarray.insert("Data #\(index)", atIndex: index)

使用Deque而不是Array

Deque相对于Array的主要优点是它在两端支持高效的插入和删除。 https://swift.org/blog/swift-collections/


var names:Deque = ["Steve", "Bill", "Linus", "Bret"]


在名字后面加上“Tim”

names.append("Tim")

在名字的开头加上“Tim”

names.prepend("John")

删除names的第一个元素

names.popFirst() // "John"

删除names的最后一个元素

names.popLast() // "Tim"

我相信是Swift 5.3。

普通数组wasvar myArray = ["Steve", "Bill", "Linus", "Bret"] 并且你想将“Tim”添加到数组中,那么你可以使用myArray。insert("Tim", at=*index*),所以如果你想把它添加到数组的后面,那么你可以使用myArray。append(“Tim”,at: 3)

要添加到建议append的解决方案中,知道这在许多情况下是一个平摊常数时间操作是有用的:

复杂度:平摊O(1),除非self的存储与另一个活动数组共享;如果self没有封装一个桥接NSArray,则计数为O;否则效率不确定。

我在为斯威夫特找一个像接线员那样的罪犯。它应该在常数时间内返回一个新的不可变数组,元素被钉在最后,而不改变原始数组。我还没有找到这样的标准函数。如果我找到了,我会记得告诉你的!

在Swift 4.2中: 你可以使用

myArray.append("Tim") //To add "Tim" into array

or

myArray.insert("Tim", at: 0) //Change 0 with specific location