首页 文章

在Swift中向数组添加元素

提问于
浏览
282

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

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

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

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

我应该使用什么方法?

那么我想在数组的 front 中添加一个元素呢?有不变的时间吗?

10 回答

  • 2

    要添加到solutions suggesting append,在许多情况下知道这是一个 amortised constant time 操作很有用:

    复杂性:分摊O(1),除非自己的存储与另一个实时阵列共享; O(计数)如果自己没有包裹桥接的NSArray;否则效率未指定 .

    我正在为Swift寻找一个 cons like运算符 . 它应该返回一个新的不可变数组,其元素在常量时间内固定,而不更改原始数组 . 如果我找到一个,我会记得回来报告!

  • 10

    截至 Swift 3 / 4 ,这样做如下 .

    将新元素添加到Array的末尾 .

    anArray.append("This String")
    

    将不同的Array附加到Array的末尾 .

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

    将新元素插入Array中 .

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

    将不同Array的内容插入Array中 .

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

    更多信息可在“The Swift Programming Language”的"Collection Types"章节中找到,从第110页开始 .

  • 1

    使用=和运算符:

    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
    }
    

    然后使用:

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

    在Swift 4.1和Xcode 9.4.1中

    我们可以基本上以两种方式向Array添加对象

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

    类型1)

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

    类型2)

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

    如果要添加两个数组

    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)
    
  • 1

    如果您希望在数组的开头插入而不丢失第一个位置的项目,这是一个小扩展

    extension Array{
        mutating func appendAtBeginning(newItem : Element){
            let copy = self
            self = []
            self.append(newItem)
            self.appendContentsOf(copy)
        }
    }
    
  • 15

    你可以用

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

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

    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)
    

    要将它们添加到前面:

    //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)
    

    正如其他人已经说过的那样,你不能再使用'='作为xCode 6.1

  • 503

    要添加到最后,请使用 += 运算符:

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

    该运算符等同于 append() 方法 .

    在任何索引处都插入 insert(:, atIndex:) . (见Array Reference . )

    例如,如果您想在开头插入一个便利函数,可以使用extension将其添加到 Array 类中 .

  • 2

    从Swift编程语言的第143页开始:

    您可以通过调用数组的append方法将新项添加到数组的末尾 . 或者,使用添加赋值运算符(=)将新项添加到数组的末尾

    摘录自:Apple Inc.“The Swift Programming Language . ”iBooks . https://itun.es/us/jEUH0.l

  • 15

    如果要追加唯一对象,可以展开 Array struct

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

相关问题