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
}
4 Réponses :
Un bon moyen d'éliminer les doublons utilise le jeu (), car un ensemble ne peut contenir qu'un de chaque élément
Mais je veux une sortie comme: [3,3]
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()
}
}
Puisque vous ne voulez que le dupliquement, utilisez une combinaison de Exemple: strong> p> dictionnaire code> strud> init (groupement: par :) code> strong>, Filtre (_:) code> strong> et platmap (_:) code> strong>.
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.
considérons ce tableau à 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]
Je faisais cette même réponse, mais juste avant de le soumettre: p.
@Shivamgaure peut-être la prochaine fois;)
Stackoverflow.com/Questtions/29727618 / ... ?
Vous pouvez utiliser
définir code>. Vous avez besoin de confirmerPaysable code> 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