关于ios:在Swift中向数组添加元素

Add an element to an array in Swift

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

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

稍后,我想将一个元素推/附加到所述数组的末尾,以获得:

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

我应该使用什么方法?

如果我想在数组前面添加一个元素呢?有不变的时间吗?


从Swift 3/4开始,执行如下操作。

向数组末尾添加新元素。

1
anArray.append("This String")

将另一个数组附加到数组的末尾。

1
2
anArray += ["Moar","Strings"]
anArray.append(contentsOf: ["Moar","Strings"])

向数组中插入新元素。

1
anArray.insert("This String", at: 0)

将不同数组的内容插入到数组中。

1
anArray.insert(contentsOf: ["Moar","Strings"], at: 0)

更多信息可以在"swift编程语言"的"集合类型"一章中找到,从第110页开始。


如果需要,还可以传入变量和/或对象。

1
2
3
4
5
6
7
8
var str1:String ="John"
var str2:String ="Bob"

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

//add to the end of the array with append
myArray.append(str1)
myArray.append(str2)

要将它们添加到前面:

1
2
3
4
5
6
7
//use 'insert' instead of append
myArray.insert(str1, atIndex:0)
myArray.insert(str2, atIndex:0)

//Swift 3
myArray.insert(str1, at: 0)
myArray.insert(str2, at: 0)

正如其他人已经说过的,从Xcode6.1开始,您不能再使用"+="。


要添加到结尾,请使用+=运算符:

1
2
myArray += ["Craig"]
myArray += ["Jony","Eddy"]

该运算符通常等价于append(contentsOf:)方法。(在真正的旧swift版本中,可以附加单个元素,而不仅仅是相同元素类型的其他集合。)

还有insert(_:at:)可以插入任何索引。

例如,如果您希望在开头插入一个方便的函数,那么您可以用扩展名将它添加到Array类中。


使用+=和+运算符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
extension Array {

}

func += <V> (inout left: [V], right: V) {
    left.append(right)
}

func + <V>(left: Array<V>, right: V) -> Array<V>
{
    var map = Array<V>()
    for (v) in left {
        map.append(v)
    }

    map.append(right)

    return map
}

然后使用:

1
2
3
4
var list = [AnyObject]()
list +="hello"
list += ["hello","world!"]
var list2 = list +"anything"

如果您希望在数组开始处插入而不在第一个位置丢失项,则可以使用小扩展

1
2
3
4
5
6
7
8
extension Array{
    mutating func appendAtBeginning(newItem : Element){
        let copy = self
        self = []
        self.append(newItem)
        self.appendContentsOf(copy)
    }
}


在Swift 4.1和Xcode 9.4.1中

我们可以用两种方法向数组添加对象

1
2
3
4
let stringOne ="One"
let strigTwo ="Two"
let stringThree ="Three"
var array:[String] = []//If your array is string type

1型)

1
2
3
//To append elements at the end
array.append(stringOne)
array.append(stringThree)

2型)

1
2
//To add elements at specific index
array.insert(strigTwo, at: 1)

如果要添加两个数组

1
2
3
4
5
6
7
var array1 = [1,2,3,4,5]
let array2 = [6,7,8,9]

let array3 = array1+array2
print(array3)
array1.append(contentsOf: array2)
print(array1)


除了建议使用append的解决方案外,了解这在许多情况下是一个摊销的固定时间操作是很有用的:

Complexity: Amortized O(1) unless self's storage is shared with another live array; O(count) if self does not wrap a bridged NSArray; otherwise the efficiency is unspecified.

我在找一个类似于cons的swift接线员。它应该在不变的时间内返回一个新的不可变数组,并在末尾附加元素,而不更改原始数组。我还没有找到这样做的标准函数。如果我找到一个,我会尽量记住报告!


从Swift编程语言第143页:

You can add a new item to the end of an array by calling the array’s append method

Alternatively, add a new item to the end of an array with the addition assignment operator (+=)

摘自:苹果公司。"Swift编程语言。"iBooks。网址:https://itun.es/us/jeuh0.l


如果数组是nsarray,则可以使用adding函数在数组末尾添加任何对象,如下所示:

斯威夫特4.2

1
2
3
4
5
6
7
var myArray: NSArray = []
let firstElement: String ="First element"
let secondElement: String ="Second element"

// Process to add the elements to the array
myArray.adding(firstElement)
myArray.adding(secondElement)

结果:

1
2
print(myArray)
// ["First element","Second element"]

这是一个非常简单的方法,问候!


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

1
2
3
4
5
6
7
extension Array where Element: Equatable {
    mutating func appendUniqueObject(object: Generator.Element) {
        if contains(object) == false {
            append(object)
        }
    }
}

你可以使用

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