An NSSet
kann in Array
using konvertiert werden, set.allObjects()
aber es gibt keine solche Methode in der neuen Set
(eingeführt mit Swift 1.2). Dies kann weiterhin durch Konvertieren von Swift Set in NSSet und Verwenden der allObjects()
Methode erfolgen, dies ist jedoch nicht optimal.
185
let array = Array(someSet)
funktioniert auch in Swift 2NSSet
gegeben ist. Die Frage war über einen SwiftSet
.Im einfachsten Fall , mit Swift 3, können Sie
Array
‚sinit(_:)
initializer bekommen einArray
von einemSet
.init(_:)
hat die folgende Erklärung:Verwendung:
Allerdings , wenn Sie auch auf jedem Element einige Operationen ausführen möchten Ihrer
Set
während Umwandlung in einArray
, können Sie verwendenmap
,flatMap
,sort
,filter
und andere funktionelle Methoden bereitgestelltCollection
Protokoll:quelle
ZUSATZ:
Swift hat keine DEFINED ORDER für Set und Dictionary. Aus diesem Grund sollten Sie die sorted () -Methode verwenden, um zu verhindern, dass unerwartete Ergebnisse wie Ihr Array wie ["a", "b"] oder ["b", "a" angezeigt werden "] und du willst das nicht.
Um dies zu beheben:
FÜR SETS
Ergebnis: ["a", "b", "c"]
Ohne sortiert ()
Es kann sein:
einfache Mathematik: 3! = 6
quelle
Ich habe eine einfache Erweiterung , die Ihnen eine unsortierte gibt
Array
als EigenschaftSet
in Swift 4.0 .Wenn Sie ein sortiertes Array wünschen, können Sie entweder eine zusätzliche berechnete Eigenschaft hinzufügen oder die vorhandene an Ihre Anforderungen anpassen.
Um dies zu nutzen, rufen Sie einfach an
quelle
Die aktuelle Antwort für Swift 2.x und höher (aus dem Swift Programming Language-Handbuch zu Sammlungstypen) scheint darin zu bestehen, entweder die Set-Einträge wie folgt zu durchlaufen:
Oder um die "sortierte" Methode zu verwenden:
Es scheint, dass die Swift-Designer allObjects als Zugriffsmechanismus nicht mochten, da Sets nicht wirklich geordnet sind. Deshalb wollten sie sicherstellen, dass Sie kein Array ohne explizite Reihenfolge herausbekommen.
Wenn Sie den Aufwand für das Sortieren nicht möchten und sich nicht um die Reihenfolge kümmern, verwende ich normalerweise die Map- oder FlatMap-Methoden, die etwas schneller sein sollten, um ein Array zu extrahieren:
Mit diesem Array können Sie Folgendes tun: Wenn Sie ein Array eines bestimmten Typs benötigen (z. B. Berechtigungen aus einer Reihe verwalteter Objektbeziehungen, die nicht als typisierte Menge deklariert sind), können Sie Folgendes tun:
quelle
myItemSet.sorted()
erfordert, dass die Elemente sindComparable
. -myItemSet.map { $0 }
sollte das gleiche Ergebnis liefern wieArray(myItemSet)
, beide erstellen ein Array, indem sie alle Elemente der Menge auflisten. Letzteres funktioniert immer noch für mich, einige Details zu Ihrem obigen Kommentar wären willkommen.Rufen Sie diese Methode auf und übergeben Sie Ihr Set
So was :
quelle