[ios] Swift의 Dictionary에서 특정 인덱스의 키를 어떻게 얻습니까?
나는 Dictionary
Swift에 있고 특정 색인에서 키를 얻고 싶습니다.
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를 살펴 봐야합니다.
답변
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)];
}
}
}