Estou um pouco confuso com a resposta que o Xcode está me dando para esse experimento no Swift Programming Language Guide:
// 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
Entendo que, como o dicionário está sendo cruzado, o maior número está sendo definido para a variável largest
. No entanto, estou confuso sobre o motivo pelo qual o Xcode está dizendo que largest
está sendo definido 5 vezes, ou 1 vez ou 3 vezes, dependendo de cada teste.
Ao examinar o código, vejo que ele deve ser definido 6 vezes apenas em "Prime" (2, 3, 5, 7, 11, 13). Em seguida, deve pular todos os números em "Fibonacci", pois esses são todos menores que o maior, atualmente definido como 13 em "Prime". Em seguida, deve ser definido como 16 e, finalmente, 25 em "Quadrado", resultando em um total de 8 vezes.
Estou perdendo algo totalmente óbvio?
fonte
O resultado seria
("Nome", "Maninder") ("Sobrenome", "Singh") ("Endereço", "Chandigarh")
fonte
Esta é uma função definida pelo usuário para iterar através de um dicionário:
fonte
Aqui está uma alternativa para esse experimento (Swift 3.0). Isso informa exatamente qual tipo de número foi o maior.
fonte
Se você deseja iterar sobre todos os valores:
fonte
Matrizes são coleções ordenadas, mas dicionários e conjuntos são coleções não ordenadas. Portanto, você não pode prever a ordem da iteração em um dicionário ou conjunto.
Leia este artigo para saber mais sobre os Tipos de coleção: Linguagem de programação rápida
fonte
Você também pode usar
values.makeIterator()
para iterar sobre valores de dict, assim:Você também pode fazer a iteração dessa maneira, em um estilo mais rápido:
*
sbItems
é ditado do tipo[String : NSManagedObject]
fonte