dictionary - dictionaries - Iterando a través de un diccionario en Swift
swift 4 dictionaries (4)
Aquí hay una alternativa para ese experimento (Swift 3.0). Esto te dice exactamente qué tipo de número era el más grande.
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
var whichKind: String? = nil
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
whichKind = kind
largest = number
}
}
}
print(whichKind)
print(largest)
OUTPUT:
Optional("Square")
25
Estoy un poco confundido con la respuesta que Xcode me está dando a este experimento en la Guía de lenguaje de programación de Swift:
// Use a for-in to iterate through a dictionary (experiment)
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25]
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
Entiendo que a medida que se cruza el diccionario, el número más grande se establece en la variable largest
. Sin embargo, estoy confundido sobre por qué Xcode dice que el largest
se establece 5 veces, o 1 vez, o 3 veces, dependiendo de cada prueba.
Al mirar a través del código, veo que debe establecerse 6 veces en "Prime" solo (2, 3, 5, 7, 11, 13). Luego, debe omitir cualquier número en "Fibonacci" ya que todos son menos que el más grande, que actualmente está configurado en 13 desde "Primer". Luego, debe establecerse en 16, y finalmente 25 en "Cuadrado", produciendo un total de 8 veces.
¿Me estoy perdiendo algo completamente obvio?
Las matrices son colecciones ordenadas, pero los diccionarios y conjuntos son colecciones desordenadas. Por lo tanto, no puede predecir el orden de iteración en un diccionario o conjunto.
Lee este artículo para saber más sobre los tipos de colección: Swift Programming Language
Los diccionarios en Swift (y otros idiomas) no están ordenados. Cuando itera por el diccionario, no hay garantía de que el pedido coincida con el orden de inicialización. En este ejemplo, Swift procesa la tecla "Cuadrado" antes que las otras. Puede ver esto agregando una declaración de impresión al ciclo. 25 es el quinto elemento de Square, por lo que el más grande se establecería 5 veces para los 5 elementos en Square y luego se mantendría en 25.
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25]
]
var largest = 0
for (kind, numbers) in interestingNumbers {
println("kind: /(kind)")
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
Esto imprime:
kind: Square kind: Prime kind: Fibonacci
let dict : [String : Any] = ["FirstName" : "Maninder" , "LastName" : "Singh" , "Address" : "Chandigarh"]
dict.forEach { print($0) }
El resultado sería
("Nombre", "Maninder") ("Apellido", "Singh") ("Dirección", "Chandigarh")