0
votes

Filtrer les données en moins de temps

J'ai 2000 contacts et je veux trouver des doublons et le filtre prennent comme 1min pour trouver des doublons.

let duplicateArray = contacts.filter { value in 
    contacts.filter({ 
        $0.phoneNumbers.first?.value.value(forKey: "stringValue") as? 
        String ?? "" == value.phoneNumbers.first?.value.value(forKey: 
        "stringValue") as? String ?? "" 
    }).count > 1  
}


7 commentaires

Stackoverflow.com/Questtions/29727618 / ... ?


Vous pouvez utiliser définir . Vous avez besoin de confirmer Paysable Protocole de votre classe personnalisée.


Je veux chercher les deux numéros en double, par exemple: Let TRAY = [1,2,3,3] de sorte que la sortie doit être [3,3]


Je suggérerais d'utiliser des données de base et de garder vos contacts dans une base de données. C'est super rapide pour la recherche et le tri.


@DavidSteppenBeckphd J'avais utilisé Coredata mais cela prend 45Sec juste pour ajouter 2000 données


@Siddhantkuldeep, je suis surpris que cela ait pris aussi longtemps. Vouliez-vous mettre à jour / l'ajout de petits lots (groupes d'~ 50 objets) plutôt qu'à tous les 2000 à la fois?


@Davidsteppenbeckphd dans la vie ci -taise J'ajoutais tous les contacts de 2000 à Coredata


4 Réponses :


1
votes

Un bon moyen d'éliminer les doublons utilise le jeu (), car un ensemble ne peut contenir qu'un de chaque élément xxx


1 commentaires

Mais je veux une sortie comme: [3,3]



0
votes

Vous pouvez utiliser quelque chose comme celui-ci

extension Array where Element: Hashable {
   func removingDuplicates() -> [Element] {
       var addedDict = [Element: Bool]()

       return filter {
           addedDict.updateValue(true, forKey: $0) == nil
       }
   }

   mutating func removeDuplicates() {
       self = self.removingDuplicates()
   }
}


0 commentaires

0
votes

Puisque vous ne voulez que le dupliquement, utilisez une combinaison de dictionnaire init (groupement: par :) , Filtre (_:) et platmap (_:) .

Exemple: xxx


3 commentaires

Ce filtre prend 2 minutes pour filtrer 2000 données


Êtes-vous sûr que @Siddhantkuldeep? Je peux le courir dans 33ms


@Siddhantkuldeep pas. Veuillez ajouter la méthode que vous utilisez pour calculer l'heure d'exécution. Il prend quelque part environ 30-40ms.



2
votes

considérons ce tableau xxx pré>

à l'aide d'un dictionnaire, comptez le nombre de fois que chaque élément apparaît dans la matrice: p>

var output = dict.flatMap { (key, value) in
    return Array(repeating: key, count: value == 1 ? 0 : value)
}

print(output)  //[3, 3, 2, 2]


2 commentaires

Je faisais cette même réponse, mais juste avant de le soumettre: p.


@Shivamgaure peut-être la prochaine fois;)