example dictionaries data array arrays dictionary swift

arrays - dictionaries - Swift Dictionary: obtener valores como matriz



nsdictionary swift 4 (4)

A partir de Swift 2.0, la propiedad values Dictionary ahora devuelve una LazyMapCollection lugar de una LazyBidirectionalCollection . El tipo de Array sabe cómo inicializarse utilizando este tipo de colección abstracta:

let colors = Array(colorsForColorSchemes.values)

La inferencia de tipos de Swift ya sabe que estos valores son objetos UIColor , por lo que no se requiere ningún tipo de conversión, ¡lo cual es bueno!

Tengo un diccionario que contiene objetos UIColor hash por un valor enum, ColorScheme :

var colorsForColorScheme: [ColorScheme : UIColor] = ...

Me gustaría poder extraer una matriz de todos los colores (los valores) contenidos en este diccionario. Pensé que podría usar la propiedad de values , como se usa al iterar sobre los valores del diccionario ( for value in dictionary.values {...} ), pero esto devuelve un error:

let colors: [UIColor] = colorsForColorSchemes.values ~~~~~~~~~~~~~~~~~~~~~^~~~~~~ ''LazyBidrectionalCollection<MapCollectionView<Dictionary<ColorScheme, UIColor>, UIColor>>'' is not convertible to ''UIColor''

Parece que en lugar de devolver una Array de valores, el método de values devuelve un tipo de colección más abstracto. ¿Hay alguna manera de obtener una Array contenga los valores del diccionario sin extraerlos en un bucle for-in ?


También puede asignar diccionario a una matriz de valores:

let colors = colorsForColorScheme.map { $0.1 }

El cierre toma una tupla de clave-valor del diccionario y devuelve solo un valor. Entonces, la función de mapa produce una matriz de valores.


Use colorsForColorScheme.map({$0.value})


puedes crear una extensión en LazyMapCollection

public extension LazyMapCollection { func toArray() -> [Element]{ return Array(self) } }

colorsForColorSchemes.values.toArray() o colorsForColorSchemes.keys.toArray()