Swift의 사전에서 특정 인덱스의 키를 가져오려면 어떻게 해야 합니까?
나는 있습니다Dictionary
스위프트에서 특정 인덱스의 키를 받고 싶습니다.
var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()
키를 반복하여 기록할 수 있음을 알고 있습니다.
for key in myDict.keys{
NSLog("key = \(key)")
}
하지만, 이상하게도, 이런 것은 가능하지 않습니다.
var key : String = myDict.keys[0]
왜요?
그것은keys
돌아온다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
사전은 본질적으로 순서가 없으므로 지정된 인덱스의 키가 항상 동일할 것으로 예상하지 마십시오.
스위프트 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 및 열거형 인덱스를 가져올 수 있습니다(다른 사람들이 말했듯이, 아래와 같이 순서대로 나올 것이라는 보장은 없습니다).
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 에서:
배열 인스턴스를 사용하는 API에서 사전의 키 또는 값을 사용해야 하는 경우 키 또는 값 속성을 사용하여 새 배열을 초기화합니다.
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
}
Swift 3에서 이 코드를 사용하여 지정된 인덱스에서 키-값 쌍(튜플)을 가져옵니다.
extension Dictionary {
subscript(i:Int) -> (key:Key,value:Value) {
get {
return self[index(startIndex, offsetBy: i)];
}
}
}
스위프트 4
약간 주제에서 벗어남:그러나 사전 배열이 있는 경우에는 다음과 같습니다. [[String : String]
var array_has_dictionary = [ // Start of array
// Dictionary 1
[
"name" : "xxxx",
"age" : "xxxx",
"last_name":"xxx"
],
// Dictionary 2
[
"name" : "yyy",
"age" : "yyy",
"last_name":"yyy"
],
] // end of array
cell.textLabel?.text = Array(array_has_dictionary[1])[1].key
// Output: age -> yyy
다음은 Swift 1.2를 사용한 예입니다.
var person = ["name":"Sean", "gender":"male"]
person.keys.array[1] // "gender", get a dictionary key at specific index
person.values.array[1] // "male", get a dictionary value at specific index
자바의 LinkedHashMap 같은 것을 찾고 있었습니다.내가 틀리지 않았다면 Swift와 Objective-C 둘 다 가지고 있지 않습니다.
제가 처음 생각한 것은 사전을 배열로 묶는 것이었습니다. [[String: UIImage]]
하지만 그때 저는 사전에서 열쇠를 잡는 것이 이상하다는 것을 깨달았습니다.Array(dict)[index].key
그래서 저는 튜플스와 함께 갔습니다.이제 내 배열은 다음과 같습니다.[(String, UIImage)]
그래서 나는 그것을 찾을 수 있습니다.tuple.0
더 이상 배열로 변환하지 않습니다.내 2센트야.
언급URL : https://stackoverflow.com/questions/24640990/how-do-i-get-the-key-at-a-specific-index-from-a-dictionary-in-swift
'bestsource' 카테고리의 다른 글
배포된 Heroku 앱에서 파일 및 파일 구조를 보는 방법 (0) | 2023.04.29 |
---|---|
Eclipse : 리소스를 필터링하는 동안 오류가 발생했습니다. (0) | 2023.04.29 |
pip로 설치된 모든 패키지를 제거하려면 어떻게 해야 합니까? (0) | 2023.04.29 |
XAML만 사용하여 단색 삼각형 그리기 (0) | 2023.04.29 |
"ng-bootstrap"과 "ngx-bootstrap"의 차이점은 무엇입니까? (0) | 2023.04.29 |