bestsource

Swift의 사전에서 특정 인덱스의 키를 가져오려면 어떻게 해야 합니까?

bestsource 2023. 4. 29. 09:32
반응형

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

반응형