数组append()返回一个新数组

时间:2016-05-26 06:25:46

标签: arrays swift append immutability

我正在使用一个有数组的结构。我想在数组中添加一个新元素,但是,数组是不可变的,所以我不能简单地附加到它。需要创建一个新数组,附加到它,然后使用扩展数组创建一个新结构。 (我知道这听起来很痛苦并且内存密集,但它更清晰,更符合功能编程范例。)

是否有一个append()之类的函数不会改变数组,而是返回一个新数组?这比必须声明一个新数组并附加到它更容易。

3 个答案:

答案 0 :(得分:13)

你不只是将两个数组加在一起吗?

let originalArray: [Type] = ...
let objectToAppend: Type = ...
let newArray = originalArray + [objectToAppend]


或者,在扩展中,如果您愿意:

extension Array {
    func arrayByAppending(o: Element) -> [Element] {
        return self + [o]
    }
}

答案 1 :(得分:1)

试试这个:

extension NSArray {
    func myAppend(arrToAppend: NSArray) -> NSArray {
        let r : NSMutableArray = NSMutableArray(array: self)
        r.addObjectsFromArray(arrToAppend as [AnyObject])
        return r.copy() as! NSArray
    }
}

表示单个对象

extension NSArray {
    func myAppend2(objToAppend: AnyObject) -> NSArray {
        let r : NSMutableArray = NSMutableArray(array: self)
        r.addObject(objToAppend)
        return r.copy() as! NSArray
    }
}

答案 2 :(得分:1)

试试这样:

extension Array {
    func appendToNewArray(newElement: Element) -> Array {
        var result = self
        result.append(newElement)
        return result
    }
}

let ar = [1,2]

let ar2 = ar.appendToNewArray(3)
print(ar2)   // "[1, 2, 3]\n"