Jestem trochę zdezorientowany odpowiedzią Xcode na ten eksperyment w 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
Rozumiem, że jako słownika jest transversed, największa liczba ta jest zestaw do zmiennej largest
. Jestem jednak zdezorientowany, dlaczego Xcode mówi, że largest
jest ustawiany 5 razy lub 1 raz lub 3 razy, w zależności od każdego testu.
Przeglądając kod, widzę, że należy go ustawić 6 razy w samym „Prime” (2, 3, 5, 7, 11, 13). Następnie powinien pomijać dowolne liczby w „Fibonacci”, ponieważ wszystkie są mniejsze od największej, która obecnie jest ustawiona na 13 od „Prime”. Następnie powinien być ustawiony na 16, a na końcu 25 na „Square”, dając w sumie 8 razy.
Czy brakuje mi czegoś całkowicie oczywistego?
źródło
Wynik byłby
(„FirstName”, „Maninder”) („LastName”, „Singh”) („Address”, „Chandigarh”)
źródło
Jest to funkcja zdefiniowana przez użytkownika do iteracji w słowniku:
źródło
Oto alternatywa dla tego eksperymentu (Swift 3.0). To mówi dokładnie, jaki rodzaj liczby był największy.
źródło
Jeśli chcesz iterować wszystkie wartości:
źródło
Tablice są kolekcjami uporządkowanymi, ale słowniki i zestawy są kolekcjami nieuporządkowanymi. Dlatego nie można przewidzieć kolejności iteracji w słowniku lub zestawie.
Przeczytaj ten artykuł, aby dowiedzieć się więcej o typach kolekcji: Swift Programming Language
źródło
Możesz także użyć
values.makeIterator()
do iteracji po wartościach dykt, takich jak:Możesz także wykonać taką iterację w bardziej płynnym stylu:
*
sbItems
jest dykta typu[String : NSManagedObject]
źródło