Array append() to return 一个新数组
Array append() to return a new array
我正在使用一个包含数组的结构。我想向数组添加一个新元素,但是,数组是不可变的,所以我不能简单地附加到它。需要创建一个新数组,附加到它,然后使用扩展数组创建一个新结构。 (我知道这听起来很痛苦,而且占用大量内存,但它更简洁,更符合函数式编程范式。)
是否有类似 append() 的函数不改变数组而是 returns 一个新的?这比必须声明一个新数组并附加到它更容易。
试试这个:
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
}
}
你不会把两个数组加在一起吗?
let originalArray: [Type] = ...
let objectToAppend: Type = ...
let newArray = originalArray + [objectToAppend]
或者,在扩展中,如果您愿意:
extension Array {
func arrayByAppending(o: Element) -> [Element] {
return self + [o]
}
}
这样试试:
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"
这是一个常见问题,您希望创建一个新的修改后的值,但您不知道该可变性会“泄漏”出去。这可以通过创建一个小函数来解决:
func withMutator<T>(_ value: T, mutator: (inout T) -> Void) -> T {
var value = value
mutator(&value)
return value
}
直接使用(使用):
let newArray = withMutator(originalArray) { [=11=].append(objectToAppend) }
或者,正如其他人在他们的答案中所显示的那样,扩展 Array
:
extension Array {
func arrayByAppending(_ newElement: Element) -> Array<Element> {
return withMutator(self) { [=12=].append(newElement) }
}
}
let newArray = originalArray.arrayByAppending(objectToAppend)
我正在使用一个包含数组的结构。我想向数组添加一个新元素,但是,数组是不可变的,所以我不能简单地附加到它。需要创建一个新数组,附加到它,然后使用扩展数组创建一个新结构。 (我知道这听起来很痛苦,而且占用大量内存,但它更简洁,更符合函数式编程范式。)
是否有类似 append() 的函数不改变数组而是 returns 一个新的?这比必须声明一个新数组并附加到它更容易。
试试这个:
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
}
}
你不会把两个数组加在一起吗?
let originalArray: [Type] = ...
let objectToAppend: Type = ...
let newArray = originalArray + [objectToAppend]
或者,在扩展中,如果您愿意:
extension Array {
func arrayByAppending(o: Element) -> [Element] {
return self + [o]
}
}
这样试试:
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"
这是一个常见问题,您希望创建一个新的修改后的值,但您不知道该可变性会“泄漏”出去。这可以通过创建一个小函数来解决:
func withMutator<T>(_ value: T, mutator: (inout T) -> Void) -> T {
var value = value
mutator(&value)
return value
}
直接使用(使用
let newArray = withMutator(originalArray) { [=11=].append(objectToAppend) }
或者,正如其他人在他们的答案中所显示的那样,扩展 Array
:
extension Array {
func arrayByAppending(_ newElement: Element) -> Array<Element> {
return withMutator(self) { [=12=].append(newElement) }
}
}
let newArray = originalArray.arrayByAppending(objectToAppend)