【问题标题】:Array append() to return a new arrayArray append() 返回一个新数组
【发布时间】:2016-09-24 00:00:38
【问题描述】:

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

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

【问题讨论】:

    标签: arrays swift append immutability


    【解决方案1】:

    你不把两个数组加在一起吗?

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


    或者,如果您愿意,可以在扩展程序中:

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

      • 谢谢。但我只想添加一个元素。 (不是数组)
      【解决方案3】:

      试试这样:

      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"
      

      【讨论】:

        猜你喜欢
        • 2012-03-20
        • 2017-12-05
        • 2016-06-30
        • 2017-05-29
        • 1970-01-01
        • 2016-09-16
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多