[ios] Swift의 Dictionary에서 특정 인덱스의 키를 어떻게 얻습니까?

나는 DictionarySwift에 있고 특정 색인에서 키를 얻고 싶습니다.

var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()

키를 반복하고 기록 할 수 있다는 것을 알고 있습니다.

for key in myDict.keys{

    NSLog("key = \(key)")

}

하지만 이상하게도 이런 일은 불가능합니다

var key : String = myDict.keys[0]

왜 ?



답변

그 이유 keys는 returns LazyMapCollection<[Key : Value], Key>이며 Int. 이를 처리하는 한 가지 방법 startIndex은 다음과 같이 첨자하려는 정수로 사전을 전진시키는 것입니다 .

let intIndex = 1 // where intIndex < myDictionary.count
let index = myDictionary.index(myDictionary.startIndex, offsetBy: intIndex)
myDictionary.keys[index]

또 다른 가능한 해결책은 keys입력으로 배열을 초기화 한 다음 결과에 정수 첨자를 사용할 수 있습니다.

let firstKey = Array(myDictionary.keys)[0] // or .first

사전은 본질적으로 순서가 지정되어 있지 않으므로 지정된 인덱스의 키가 항상 동일 할 것이라고 기대하지 마십시오.


답변

Swift 3 : Array()이 작업에 유용 할 수 있습니다.

키 가져 오기 :

let index = 5 // Int Value
Array(myDict)[index].key

가치 얻기 :

Array(myDict)[index].value


답변

다음은 인덱스로 사전의 키와 값에 액세스하기위한 작은 확장입니다.

extension Dictionary {
    subscript(i: Int) -> (key: Key, value: Value) {
        return self[index(startIndex, offsetBy: i)]
    }
}


답변

사전을 반복하고 for-in 및 enumerate를 사용하여 인덱스를 가져올 수 있습니다 (다른 사람들이 말했듯이 아래처럼 순서대로 나올 것이라는 보장은 없습니다)

let dict = ["c": 123, "d": 045, "a": 456]

for (index, entry) in enumerate(dict) {
    println(index)   // 0       1        2
    println(entry)   // (d, 45) (c, 123) (a, 456)
}

먼저 정렬하려면 ..

var sortedKeysArray = sorted(dict) { $0.0 < $1.0 }
println(sortedKeysArray)   // [(a, 456), (c, 123), (d, 45)]

var sortedValuesArray = sorted(dict) { $0.1 < $1.1 }
println(sortedValuesArray) // [(d, 45), (c, 123), (a, 456)]

그런 다음 반복하십시오.

for (index, entry) in enumerate(sortedKeysArray) {
    println(index)    // 0   1   2
    println(entry.0)  // a   c   d
    println(entry.1)  // 456 123 45
}

정렬 된 사전을 만들려면 Generics를 살펴 봐야합니다.


답변

에서 https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/CollectionTypes.html :

Array 인스턴스를 사용하는 API에서 사전의 키 또는 값을 사용해야하는 경우 keys 또는 values ​​속성을 사용하여 새 배열을 초기화합니다.

let airportCodes = [String](airports.keys) // airportCodes is ["TYO", "LHR"]
let airportNames = [String](airports.values) // airportNames is ["Tokyo", "London Heathrow"]


답변

SWIFT 3. 첫 번째 요소의 예

let wordByLanguage = ["English": 5, "Spanish": 4, "Polish": 3, "Arabic": 2]

if let firstLang = wordByLanguage.first?.key {
    print(firstLang)  // English
}


답변

에서 스위프트 3 지정된 인덱스의 키 – 값 쌍 (튜플)을 얻기 위해이 코드를 사용하려고 :

extension Dictionary {
    subscript(i:Int) -> (key:Key,value:Value) {
        get {
            return self[index(startIndex, offsetBy: i)];
        }
    }
}