Existe-t-il des appels de bibliothèque standard que je peux utiliser pour effectuer des opérations d'ensemble sur deux tableaux ou implémenter moi-même une telle logique (idéalement aussi fonctionnellement et aussi efficacement que possible)?
100
Réponses:
Oui, Swift a la
Set
classe.Swift 3.0+ peut effectuer des opérations sur des ensembles comme:
Swift 2.0 peut calculer sur les arguments de tableau:
Swift 1.2+ peut calculer sur des ensembles:
Si vous utilisez des structures personnalisées, vous devez implémenter Hashable.
Merci à Michael Stern dans les commentaires pour la mise à jour Swift 2.0.
Merci à Amjad Husseini dans les commentaires pour l'info Hashable.
la source
set1.union(array2)
etset1.exclusiveOr(array2)
sont tous deux légitimes, en plus des formulaires présentés ci-dessus.Il n'y a pas d'appels de bibliothèque standard, mais vous voudrez peut-être consulter la bibliothèque ExSwift . Il comprend un tas de nouvelles fonctions sur les tableaux, y compris la différence, l'intersection et l'union.
la source
Vous voudrez peut-être suivre le même modèle que dans Objective-C, qui manque également de telles opérations, mais il existe une solution de contournement simple:
comment intersecter deux tableaux dans l'objectif C?
la source
La méthode la plus efficace que je connaisse est d'utiliser des nombres de godel. Google pour l'encodage godel.
L'idée est ainsi. Supposons que vous ayez N nombres possibles et que vous deviez en faire des ensembles. Par exemple, N = 100 000 et souhaitez créer des ensembles tels que {1,2,3}, {5, 88, 19000}, etc.
L'idée est de garder la liste des N nombres premiers en mémoire et pour un ensemble donné {a, b, c, ...} vous l'encodez comme
Vous encodez donc un ensemble en tant que BigNumber. Les opérations avec BigNumbers, malgré le fait qu'elles soient plus lentes que les opérations avec des nombres entiers, sont toujours très rapides.
Pour réunir 2 ensembles A, B, vous prenez
le plus petit commun multiple de A et B car A et B sont des ensembles et les deux nombres.
Pour faire l'intersection que vous prenez
plus grand diviseur commun.
etc.
Cet encodage s'appelle godelization, vous pouvez google pour plus, tout le langage d'arithmétique écrit en utilisant la logique de Frege peut être encodé en utilisant des nombres de cette manière.
Pour obtenir l'opération est-membre? c'est très simple --
Pour obtenir le cardinal, c'est un peu plus compliqué -
vous décomposez le nombre S représentant l'ensemble en produit des facteurs premiers et ajoutez leurs exposants. Dans le cas où l'ensemble n'autorise pas les doublons, vous aurez tous les exposants 1.
la source