Array extension to remove object by value

前端 未结 15 1250
我在风中等你
我在风中等你 2020-11-22 08:30
extension Array {
    func removeObject(object: T) {
        var index = find(self, object)
        self.removeAtIndex(index)
    }
}
         


        
15条回答
  •  眼角桃花
    2020-11-22 08:30

    After reading all the above, to my mind the best answer is:

    func arrayRemovingObject(object: U, # fromArray:[U]) -> [U] {
      return fromArray.filter { return $0 != object }
    }
    

    Sample:

    var myArray = ["Dog", "Cat", "Ant", "Fish", "Cat"]
    myArray = arrayRemovingObject("Cat", fromArray:myArray )
    

    Swift 2 (xcode 7b4) array extension:

    extension Array where Element: Equatable {  
      func arrayRemovingObject(object: Element) -> [Element] {  
        return filter { $0 != object }  
      }  
    }  
    

    Sample:

    var myArray = ["Dog", "Cat", "Ant", "Fish", "Cat"]
    myArray = myArray.arrayRemovingObject("Cat" )
    

    Swift 3.1 update

    Came back to this now that Swift 3.1 is out. Below is an extension which provides exhaustive, fast, mutating and creating variants.

    extension Array where Element:Equatable {
        public mutating func remove(_ item:Element ) {
            var index = 0
            while index < self.count {
                if self[index] == item {
                    self.remove(at: index)
                } else {
                    index += 1
                }
            }
        }
    
        public func array( removing item:Element ) -> [Element] {
            var result = self
            result.remove( item )
            return result
        }
    }
    

    Samples:

    // Mutation...
          var array1 = ["Cat", "Dog", "Turtle", "Cat", "Fish", "Cat"]
          array1.remove("Cat")
          print(array1) //  ["Dog", "Turtle", "Socks"]
    
    // Creation...
          let array2 = ["Cat", "Dog", "Turtle", "Cat", "Fish", "Cat"]
          let array3 = array2.array(removing:"Cat")
          print(array3) // ["Dog", "Turtle", "Fish"]
    

提交回复
热议问题