Search code examples
arraysswiftios8addressbook

Find Duplicate Elements In Array Using Swift


How to find Duplicate Elements in Array? I have array of phone numbers so in the phone numbers i should start searching from the right side to the left side and find similar 6 integers. then i should print them out.


Solution

  • To find duplicates, you could build cross reference by phone number, then filter that down to duplicates only. For example, consider:

    let contacts = [
        Contact(name: "Rob",     phone: "555-1111"),
        Contact(name: "Richard", phone: "555-2222"),
        Contact(name: "Rachel",  phone: "555-1111"),
        Contact(name: "Loren",   phone: "555-2222"),
        Contact(name: "Mary",    phone: "555-3333"),
        Contact(name: "Susie",   phone: "555-2222")
    ]
    

    You can build the cross reference dictionary with:

    let crossReference = Dictionary(grouping: contacts, by: \.phone)
    

    Then, to find the duplicates:

    let duplicates = crossReference
        .filter { $1.count > 1 }
    

    Clearly use whatever model types make sense for you, but the above uses the following Contact type:

    struct Contact {
        let name: String
        let phone: String
    }
    

    There are many, many ways to implement this, so I would not focus on the implementation details above, but rather focus on the concept: Build cross reference original array by some key (e.g. phone number) and then filter results down to just those keys with duplicate values.


    It sounds like you want to flatten this structure that reflects the duplicates, into a single array of contacts (I'm not sure why you'd want to do that, as you lose the structure identifying which are duplicates of each other), but if you want to do that, you can flatMap it:

    let flattenedDuplicates = crossReference
        .filter { $1.count > 1 }                 // filter down to only those with multiple contacts
        .flatMap { $0.1 }                        // flatten it down to just array of contacts that are duplicates of something else