Я немного смущен ответом, который XCode дает мне на этот эксперимент в Руководстве по языку программирования 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
Я понимаю, что, поскольку словарь пересекается, наибольшее число устанавливается для переменной largest
. Тем не менее, я не понимаю, почему Xcode говорит, что largest
он устанавливается 5, или 1, или 3 раза, в зависимости от каждого теста.
Просматривая код, я вижу, что он должен быть установлен 6 раз только в «Prime» (2, 3, 5, 7, 11, 13). Затем следует пропустить любые числа в «Фибоначчи», так как они все меньше, чем наибольшее, которое в настоящее время установлено в 13 от «Prime». Затем он должен быть установлен в 16, и, наконец, 25 в «Квадрат», в результате чего в общей сложности 8 раз.
Я что-то упускаю совершенно очевидное?
источник
Результат будет
("FirstName", "Maninder") ("LastName", "Singh") ("Адрес", "Чандигарх")
источник
Это пользовательская функция для перебора словаря:
источник
Вот альтернатива для этого эксперимента (Swift 3.0). Это говорит вам, какой именно номер был самым большим.
источник
Если вы хотите перебрать все значения:
источник
Массивы - это упорядоченные коллекции, а словари и наборы - неупорядоченные коллекции. Таким образом, вы не можете предсказать порядок итераций в словаре или наборе.
Прочтите эту статью, чтобы узнать больше о типах коллекций: язык программирования Swift
источник
Вы также можете использовать
values.makeIterator()
для перебора значений dict, например так:Вы также можете выполнить итерацию следующим образом в более быстром стиле:
*
sbItems
является диктатом типа[String : NSManagedObject]
источник