Estoy un poco confundido con la respuesta que Xcode me está dando a este experimento en la Guía del lenguaje de programación 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
Yo entiendo que a medida que el diccionario está siendo atravesada, el número más grande se está creando a la variable, largest
. Sin embargo, estoy confundido sobre por qué Xcode dice que largest
se está configurando 5 veces, o 1 vez, o 3 veces, dependiendo de cada prueba.
Cuando reviso el código, veo que debe configurarse 6 veces solo en "Prime" (2, 3, 5, 7, 11, 13). Luego, debe omitir cualquier número en "Fibonacci", ya que todos son menores que el más grande, que actualmente está establecido en 13 desde "Prime". Luego, debe establecerse en 16, y finalmente en 25 en "Cuadrado", dando un total de 8 veces.
¿Me estoy perdiendo algo completamente obvio?
fuente
El resultado sería
("Nombre", "Maninder") ("Apellido", "Singh") ("Dirección", "Chandigarh")
fuente
Esta es una función definida por el usuario para iterar a través de un diccionario:
fuente
Aquí hay una alternativa para ese experimento (Swift 3.0). Esto le dice exactamente qué tipo de número fue el más grande.
fuente
Si desea iterar sobre todos los valores:
fuente
Las matrices son colecciones ordenadas, pero los diccionarios y los conjuntos son colecciones desordenadas. Por lo tanto, no puede predecir el orden de iteración en un diccionario o un conjunto.
Lea este artículo para saber más sobre los tipos de colección: lenguaje de programación rápido
fuente
También puede usar
values.makeIterator()
para iterar sobre valores dict, como este:También puede hacer la iteración de esta manera, en un estilo más rápido:
*
sbItems
es dict de tipo[String : NSManagedObject]
fuente