NSSet
Można przekształcić w Array
użyciu set.allObjects()
, ale nie istnieje metoda, w nowej Set
(wprowadzone szybkimi 1.2). Nadal można to zrobić, konwertując Swift Set na NSSet i używając allObjects()
metody, ale nie jest to optymalne.
187
let array = Array(someSet)
działa również w Swift 2NSSet
podano. Pytanie dotyczyło SzybkiegoSet
.W najprostszym przypadku , ze Swift 3, można użyć
Array
„sinit(_:)
inicjator dostaćArray
z punktu ASet
.init(_:)
ma następującą deklarację:Stosowanie:
Jednakże , jeśli chcesz, aby wykonać pewne operacje na każdego elementu
Set
podczas przekształcania go w produktArray
, można użyćmap
,flatMap
,sort
,filter
i inne metody funkcjonalne świadczone przezCollection
protokół:źródło
DODATEK:
Swift nie ma DEFINIOWANEGO ZAMÓWIENIA dla Seta i Dictionary. Z tego powodu powinieneś użyć metody sorted (), aby zapobiec otrzymywaniu nieoczekiwanych wyników, takich jak tablica może być jak [„a”, „b”] lub [„b”, „a „] i nie chcesz tego.
ABY NAPRAWIĆ TO:
DLA ZESTAWÓW
Wynik: [„a”, „b”, „c”]
Bez sortowania ()
To może być:
prosta matematyka: 3! = 6
źródło
Stworzyłem proste rozszerzenie, które daje nieposortowane
Array
jako właściwośćSet
w Swift 4.0 .Jeśli chcesz posortować tablicę, możesz dodać dodatkową właściwość obliczoną lub zmodyfikować istniejącą według własnych potrzeb.
Aby z tego skorzystać, wystarczy zadzwonić
źródło
Obecna odpowiedź dla Swift 2.x i nowszych (z przewodnika Swift Programming Language na temat rodzajów kolekcji) wydaje się polegać na iteracji po wpisach Set w następujący sposób:
Lub, aby użyć metody „posortowanej”:
Wygląda na to, że projektanci Swift nie lubili allObjects jako mechanizmu dostępu, ponieważ zestawy nie są tak naprawdę uporządkowane, więc chcieli się upewnić, że nie wyjdzie z tablicy bez zastosowania jawnego uporządkowania.
Jeśli nie chcesz narzucać sortowania i nie przejmujesz się kolejnością, zwykle używam metod map lub flatMap, które powinny być nieco szybsze do wyodrębnienia tablicy:
Który zbuduje tablicę typu, który posiada Zestaw, jeśli potrzebujesz, aby była tablicą określonego typu (powiedzmy, że uprawnia z zestawu relacji zarządzanych obiektów, które nie są zadeklarowane jako zbiór typowy), możesz zrobić coś takiego:
źródło
myItemSet.sorted()
wymaga, aby elementy byłyComparable
. -myItemSet.map { $0 }
powinien dać ten sam wynik, ponieważArray(myItemSet)
oba tworzą tablicę, wyliczając wszystkie elementy zestawu. To drugie nadal działa dla mnie, niektóre szczegóły dotyczące powyższego komentarza będą mile widziane.wywołaj tę metodę i przekaż swój zestaw
Lubię to :
źródło