Swift에서 사전을 반복
Xcode가 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
사전이 횡단 될 때 가장 큰 숫자가 변수로 설정되고 있음을 이해합니다 largest
. 그러나 Xcode가 largest
각 테스트에 따라 5 번 또는 1 번 또는 3 번 설정되고 있다고 말하는 이유가 혼란 스럽 습니다.
코드를 살펴볼 때 "Prime"만으로 6 번 설정해야한다는 것을 알았습니다 (2, 3, 5, 7, 11, 13). 그런 다음 "피보나치"의 숫자는 모두 가장 큰 숫자보다 작으므로 현재 "프라임"에서 13으로 설정되어 있으므로 건너 뛰어야합니다. 그런 다음 "제곱"에서 16으로 설정하고 마지막으로 25를 설정하여 총 8 번을 생성해야합니다.
내가 완전히 명백한 것을 놓치고 있습니까?
Swift (및 기타 언어)의 사전은 주문되지 않습니다. 사전을 반복 할 때 순서가 초기화 순서와 일치한다는 보장이 없습니다. 이 예에서 Swift는 "Square"키를 다른 것보다 먼저 처리합니다. 루프에 print 문을 추가하여이를 확인할 수 있습니다. 25는 Square의 5 번째 요소이므로 Square에서 5 개의 요소에 대해 5 배로 설정된 다음 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
인쇄합니다 :
kind: Square kind: Prime kind: Fibonacci
다음은 해당 실험에 대한 대안입니다 (Swift 3.0). 이것은 정확히 어떤 종류의 숫자가 가장 큰지를 알려줍니다.
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
let dict : [String : Any] = ["FirstName" : "Maninder" , "LastName" : "Singh" , "Address" : "Chandigarh"]
dict.forEach { print($0) }
결과는
( "FirstName", "Maninder") ( "LastName", "Singh") ( "주소", "Chandigarh")
이것은 사전을 반복하는 사용자 정의 함수입니다.
func findDic(dict: [String: String]){
for (key, value) in dict{
print("\(key) : \(value)")
}
}
findDic(dict: ["Animal":"Lion", "Bird":"Sparrow"])
//prints Animal : Lion
Bird : Sparrow
Arrays are ordered collections but dictionaries and sets are unordered collections. Thus you can't predict the order of iteration in a dictionary or a set.
Read this article to know more about Collection Types: Swift Programming Language
If you want to iterate over all the values:
dict.values.forEach { value in
// print(value)
}
You can also use values.makeIterator()
to iterate over dict values, like this:
for sb in sbItems.values.makeIterator(){
// do something with your sb item..
print(sb)
}
You can also do the iteration like this, in a more swifty style:
sbItems.values.makeIterator().forEach{
// $0 is your dict value..
print($0)
}
*sbItems
is dict of type [String : NSManagedObject]
참고URL : https://stackoverflow.com/questions/24111627/iterating-through-a-dictionary-in-swift
'Programing' 카테고리의 다른 글
Java VM이 몇 개의 스레드를 지원할 수 있습니까? (0) | 2020.05.09 |
---|---|
C void 인수“void foo (void)”를 사용하거나“void foo ()”를 사용하지 않는 것이 더 낫습니까? (0) | 2020.05.09 |
정규 표현식을 허용하는 JavaScript의 String.indexOf () 버전이 있습니까? (0) | 2020.05.09 |
지역 지점에서 다른 지점으로 "당기는"방법은 무엇입니까? (0) | 2020.05.09 |
'권장 권장 아이콘 파일-번들에 정확히'120x120 '픽셀의 iPhone / iPod Touch 용 앱 아이콘이 포함되어 있지 않습니다 (.png 형식). (0) | 2020.05.09 |