Se NSSet
puede convertir a Array
usando set.allObjects()
pero no existe tal método en el nuevo Set
(introducido con Swift 1.2). Todavía se puede hacer mediante la conversión de Swift Set a NSSet y usar el allObjects()
método, pero eso no es óptimo.
187
let array = Array(someSet)
también funciona en Swift 2NSSet
se da un. La pregunta era sobre un SwiftSet
.En el caso más simple , con Swift 3, puede usar
Array
elinit(_:)
inicializador para obtener unArray
de aSet
.init(_:)
tiene la siguiente declaración:Uso:
Sin embargo , si también desea realizar algunas operaciones en cada elemento de su
Set
tiempo transformándola en unaArray
, puede utilizarmap
,flatMap
,sort
,filter
y otros métodos funcionales proporcionadas porCollection
el protocolo:fuente
ADICION:
Swift no tiene ORDEN DEFINIDO para Set y Dictionary. Por esa razón, debe usar el método sorted () para evitar obtener resultados inesperados, como su matriz puede ser como ["a", "b"] o ["b", "a "] y no quieres esto.
PARA ARREGLAR ESTO:
PARA CONJUNTOS
Resultado: ["a", "b", "c"]
Sin ordenado ()
Puede ser:
matemática simple: 3! = 6
fuente
Creé una extensión simple que le da
Array
una propiedad sin clasificarSet
en Swift 4.0 .Si desea una matriz ordenada, puede agregar una propiedad computada adicional o modificar la existente para satisfacer sus necesidades.
Para usar esto, solo llame
fuente
La respuesta actual para Swift 2.xy superior (de la guía del lenguaje de programación Swift sobre tipos de colección) parece ser iterar sobre las entradas de Set de la siguiente manera:
O, para usar el método "ordenado":
Parece que a los diseñadores de Swift no les gustaban todos los Objetos como mecanismo de acceso porque los Conjuntos no estaban realmente ordenados, por lo que querían asegurarse de que no salieran de una matriz sin un orden explícito aplicado.
Si no desea la sobrecarga de la clasificación y no le importa el orden, generalmente uso los métodos map o flatMap, que deberían ser un poco más rápidos para extraer una matriz:
Lo que generará una matriz del tipo que contiene el Conjunto, si necesita que sea una matriz de un tipo específico (por ejemplo, derechos de un conjunto de relaciones de objetos administrados que no se declaran como un conjunto escrito), puede hacer algo como:
fuente
myItemSet.sorted()
requiere que los elementos seanComparable
. -myItemSet.map { $0 }
debería producir el mismo resultado queArray(myItemSet)
, ambos crean una matriz enumerando todos los elementos del conjunto. Este último todavía funciona para mí, agradecería algunos detalles sobre su comentario anterior.llama a este método y pasa tu set
Me gusta esto :
fuente