An NSSet
peut être converti en Array
utilisation, set.allObjects()
mais il n'existe pas de méthode de ce type dans le nouveau Set
(introduit avec Swift 1.2). Cela peut toujours être fait en convertissant Swift Set en NSSet et en utilisant la allObjects()
méthode, mais ce n'est pas optimal.
187
let array = Array(someSet)
fonctionne également dans Swift 2NSSet
est donné. La question portait sur un SwiftSet
.Dans le cas le plus simple , avec Swift 3, vous pouvez utiliser
Array
l'init(_:)
initialiseur de pour obtenir unArray
depuis aSet
.init(_:)
a la déclaration suivante:Usage:
Cependant , si vous souhaitez également effectuer certaines opérations sur chaque élément de votre
Set
tout en le transformant en unArray
, vous pouvez utilisermap
,flatMap
,sort
,filter
et d' autres méthodes fonctionnelles fournies par leCollection
protocole:la source
UNE ADDITION :
Swift n'a pas d' ORDRE DÉFINI pour Set et Dictionary. Pour cette raison, vous devriez utiliser la méthode sorted () pour éviter d'obtenir des résultats inattendus tels que votre tableau peut être comme ["a", "b"] ou ["b", "a "] et vous ne le voulez pas.
POUR RÉPARER CECI:
POUR ENSEMBLES
Résultat: ["a", "b", "c"]
Sans trié ()
Ça peut être:
maths simples: 3! = 6
la source
J'ai créé une simple extension qui vous donne
Array
une propriété non triéeSet
dans Swift 4.0 .Si vous souhaitez un tableau trié, vous pouvez soit ajouter une propriété calculée supplémentaire, soit modifier celle existante en fonction de vos besoins.
Pour l'utiliser, il suffit d'appeler
la source
La réponse actuelle pour Swift 2.x et supérieur (du guide du langage de programmation Swift sur les types de collections) semble être d'itérer sur les entrées de l'ensemble comme ceci:
Ou, pour utiliser la méthode "triée":
Il semble que les concepteurs de Swift n'aimaient pas allObjects comme mécanisme d'accès car les ensembles ne sont pas vraiment ordonnés, ils voulaient donc s'assurer que vous ne sortiez pas d'un tableau sans qu'un ordre explicite ne soit appliqué.
Si vous ne voulez pas la surcharge du tri et que vous ne vous souciez pas de l'ordre, j'utilise généralement les méthodes map ou flatMap qui devraient être un peu plus rapides pour extraire un tableau:
Ce qui construira un tableau du type que l'ensemble contient, si vous en avez besoin pour être un tableau d'un type spécifique (par exemple, des droits à partir d'un ensemble de relations d'objets gérés qui ne sont pas déclarés comme un ensemble typé), vous pouvez faire quelque chose comme:
la source
myItemSet.sorted()
exige que les éléments soientComparable
. -myItemSet.map { $0 }
devrait produire le même résultat queArray(myItemSet)
, les deux créent un tableau en énumérant tous les éléments de l'ensemble. Ce dernier fonctionne toujours pour moi, quelques détails sur votre commentaire ci-dessus seraient appréciés.appelez cette méthode et passez votre set
Comme ça :
la source