while switch structs sintaxis functions for ciclo arrays swift set

arrays - switch - Conjunto rápido en matriz



switch en swift 3 (6)

Creé una extensión simple que le brinda una Array sin clasificar como propiedad de Set en Swift 4.0 .

extension Set { var array: [Element] { return Array(self) } }

Si desea una matriz ordenada, puede agregar una propiedad computada adicional o modificar la existente para satisfacer sus necesidades.

Para usar esto, solo llame

let array = set.array

Un NSSet se 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 método allObjects() , pero eso no es óptimo.


La respuesta actual para Swift 2.xy superior (de la guía Swift Programming Language en Tipos de colección) parece ser iterar sobre las entradas de Set de la siguiente manera:

for item in myItemSet { ... }

O, para usar el método "ordenado":

let itemsArray = myItemSet.sorted()

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:

let itemsArray = myItemSet.map { $0 }

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:

var itemsArray : [MyObjectType] = [] if let typedSet = myItemSet as? Set<MyObjectType> { itemsArray = typedSet.map { $0 } }


Puede crear una matriz con todos los elementos de un Set Swift dado simplemente con

let array = Array(someSet)

Esto funciona porque Set ajusta al protocolo SequenceType y una Array se puede inicializar con una secuencia. Ejemplo:

let mySet = Set(["a", "b", "a"]) // Set<String> let myArray = Array(mySet) // Array<String> print(myArray) // [b, a]


llama a este método y pasa tu set

func getArrayFromSet(set:NSSet)-> NSArray { return set.map ({ String($0) }) }

Me gusta esto :

var letters:Set = Set<String>(arrayLiteral: "test","test") // your set print(self.getArrayFromSet(letters))


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

var example:Set = ["a","b","c"] let makeExampleArray = [example.sorted()] makeExampleArray

Resultado: ["a", "b", "c"]

Sin ordenado ()

Puede ser:

["a","b","c"] or ["b","c","a",] or ["c","a","b"] or ["a","c","b"] or ["b","a","c"] or ["c","b","a"]

matemática simple: 3! = 6


En el caso más simple , con Swift 3, puede usar el init(_:) de la Array para obtener una Array de un Set . init(_:) tiene la siguiente declaración:

init<S>(_ s: S) where S : Sequence, Element == S.Iterator.Element

Crea una matriz que contiene los elementos de una secuencia.

Uso:

let stringSet = Set(arrayLiteral: "car", "boat", "car", "bike", "toy") let stringArray = Array(stringSet) print(stringArray) // may print ["toy", "car", "bike", "boat"]

Sin embargo , si también desea realizar algunas operaciones en cada elemento de su Set mientras lo transforma en una Array , puede usar map , flatMap , sort , filter y otros métodos funcionales proporcionados por el protocolo Collection :

let stringSet = Set(["car", "boat", "bike", "toy"]) let stringArray = stringSet.sorted() print(stringArray) // will print ["bike", "boat", "car", "toy"]

let stringSet = Set(arrayLiteral: "car", "boat", "car", "bike", "toy") let stringArray = stringSet.filter { $0.characters.first != "b" } print(stringArray) // may print ["car", "toy"]

let intSet = Set([1, 3, 5, 2]) let stringArray = intSet.flatMap { String($0) } print(stringArray) // may print ["5", "2", "3", "1"]

let intSet = Set([1, 3, 5, 2]) // alternative to `let intArray = Array(intSet)` let intArray = intSet.map { $0 } print(intArray) // may print [5, 2, 3, 1]