Um NSSet
pode ser convertido para Array
uso, set.allObjects()
mas não existe esse método no novo Set
(introduzido no Swift 1.2). Isso ainda pode ser feito convertendo o Swift Set para NSSet e use o allObjects()
método, mas isso não é o ideal.
187
let array = Array(someSet)
também trabalha na Swift 2NSSet
for fornecido. A pergunta era sobre um SwiftSet
.No caso mais simples , com o Swift 3, você pode usar
Array
oinit(_:)
inicializador para obter umArray
de aSet
.init(_:)
tem a seguinte declaração:Uso:
No entanto , se você também quiser executar algumas operações em cada elemento do seu
Set
enquanto transformando-o em umArray
, você pode usarmap
,flatMap
,sort
,filter
e outros métodos funcionais previstos peloCollection
protocolo:fonte
ADIÇÃO :
Swift não possui ORDEM DEFINIDA para Conjunto e Dicionário. Por esse motivo, você deve usar o método classificado () para impedir a obtenção de resultados inesperados, como sua matriz, pode ser como ["a", "b"] ou ["b", "a "] e você não quer isso.
Para corrigir isso:
PARA CONJUNTOS
Resultado: ["a", "b", "c"]
Sem classificado ()
Pode ser:
matemática simples: 3! = 6
fonte
Eu criei uma extensão simples que fornece
Array
uma propriedade não classificada comoSet
no Swift 4.0 .Se você deseja uma matriz classificada, pode adicionar uma propriedade computada adicional ou modificar a existente para atender às suas necessidades.
Para usar isso, basta ligar
fonte
A resposta atual para o Swift 2.xe superior (do guia Swift Programming Language sobre Tipos de coleção) parece ser uma iteração sobre as entradas do conjunto da seguinte maneira:
Ou, para usar o método "classificado":
Parece que os designers do Swift não gostaram de allObjects como um mecanismo de acesso porque Sets não são realmente ordenados, então eles queriam garantir que você não saísse de uma matriz sem uma ordem explícita aplicada.
Se você não deseja a sobrecarga da classificação e não se importa com a ordem, normalmente uso os métodos map ou flatMap, que devem ser um pouco mais rápidos para extrair uma matriz:
O que criará uma matriz do tipo que o conjunto mantém; se você precisar de uma matriz de um tipo específico (digamos, direitos de um conjunto de relações de objeto gerenciado que não são declaradas como um conjunto digitado), você pode fazer algo como:
fonte
myItemSet.sorted()
requer que os elementos sejamComparable
. -myItemSet.map { $0 }
deve produzir o mesmo resultado queArray(myItemSet)
, ambos criam uma matriz enumerando todos os elementos do conjunto. O último ainda funciona para mim, alguns detalhes sobre o seu comentário acima seriam apreciados.chame esse método e passe seu conjunto
Como isso :
fonte