Pratik Panchal
Pratik Panchal

Reputation: 529

Is it possible to remove duplicate values from Array with nil values

Array can be any type like

let myArray1 = [ 1, 2, 3, 1, 2, 1, 3, nil, 1, nil]

let myArray2 = [ 1, 2.0, 1, 3, 1.0, nil]

After removing duplicate values from the array, the new array should be:

Output -

 [ 1, 2, 3, nil ]

Upvotes: 5

Views: 519

Answers (3)

Gereon
Gereon

Reputation: 17844

@Daniel's solution as a generic function:

func uniqueElements<T: Equatable>(of array: [T?]) -> [T?] {
    return array.reduce([T?]()) { (result, item) -> [T?] in
        if result.contains(where: {$0 == item}) {
            return result
        }
        return result + [item]
    }
}

let array = [1,2,3,1,2,1,3,nil,1,nil]

let r = uniqueElements(of: array) // [1,2,3,nil]

Upvotes: 3

Bhupesh
Bhupesh

Reputation: 2310

Please check this code, I have used NSArray after getting filtered array you can convert into swift array

    let arr = [1, 1, 1, 2, 2, 3, 4, 5, 6, nil, nil, 8]

    let filterSet = NSSet(array: arr as NSArray as! [NSObject])
    let filterArray = filterSet.allObjects as NSArray  //NSArray
    print("Filter Array:\(filterArray)")

Upvotes: 2

Daniel Kl&#246;ck
Daniel Kl&#246;ck

Reputation: 21137

You can use this reduce to remove duplicated entries:

myArray.reduce([Int?]()) { (result, item) -> [Int?] in
    if result.contains(where: {$0 == item}) {
        return result
    }
    return result + [item]
}

output: [1, 2, 3, nil]

Upvotes: 2

Related Questions