arraysswiftios8xcode6

Counting unique items in array. (Swift)


How do you count the amount of unique items in an Array?

Example:

let array:Array<Int> = [1,3,2,4,6,1,3,2]

Count function: array.count will give 8

but I want to count unique items and this will give 5


Solution

  • As of Swift 1.2, Swift has a native Set type. Use the Set constructor to create a set from your array, and then the count property will tell you how many unique items you have:

    let array = [1,3,2,4,6,1,3,2]
    
    let set = Set(array)
    print(set.count)  // prints "5"
    

    For Swift 1.1 and earlier:

    Turn your array into an NSSet:

    let array = [1,3,2,4,6,1,3,2]
    
    let set = NSSet(array: array)
    println(set.count)  // prints "5"
    

    You can read more about it here.


    If you are interested in how many of each item you have, you can use a dictionary to count the items:

    var counts = [Int:Int]()
    
    for item in array {
        counts[item] = (counts[item] ?? 0) + 1
    }
    
    print(counts)        // prints "[6: 1, 2: 2, 3: 2, 1: 2, 4: 1]"
    print(counts.count)  // prints "5"
    print("There are \(counts[1] ?? 0) ones.")    // prints "There are 2 ones."
    print("There are \(counts[7] ?? 0) sevens.")  // prints "There are 0 sevens."