2016-05-26 2 views
2

Я работаю с структурой, которая имеет массив. Я хотел бы добавить новый элемент в массив, однако массив неизменен, поэтому я не могу просто добавить его. Необходимо создать новый массив, добавить к нему, а затем создать новую структуру с расширенным массивом. (Я знаю, что это звучит болезненно и интенсивнее, но оно более чистое и более согласованное с парадигмой функционального программирования.)Array append(), чтобы вернуть новый массив

Есть ли функция append(), которая не мутирует массив, а вместо этого возвращает новую? Это было бы проще, чем объявить новый массив и добавить к нему.

ответ

8

бы вы не просто добавить два массива вместе?

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


Или, в расширении, если вы предпочитаете:

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

Попробуйте это:

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 
    } 
} 
+0

Спасибо. Но я просто хочу добавить элемент. (Не массив) – Daniel

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"