Ich habe einen Dictionary
in Swift und möchte einen Schlüssel für einen bestimmten Index erhalten.
var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()
Ich weiß, dass ich die Schlüssel durchlaufen und protokollieren kann
for key in myDict.keys{
NSLog("key = \(key)")
}
Seltsamerweise ist so etwas jedoch nicht möglich
var key : String = myDict.keys[0]
Warum ?
ios
dictionary
swift
the_critic
quelle
quelle
Antworten:
Das liegt daran, dass
keys
RetourenLazyMapCollection<[Key : Value], Key>
, die nicht mit einem Index versehen werden könnenInt
. Eine Möglichkeit, dies zu handhaben, besteht darin, die WörterbücherstartIndex
um die Ganzzahl zu erweitern, mit der Sie einen Index erstellen möchten, zum Beispiel:Eine andere mögliche Lösung wäre, ein Array mit
keys
als Eingabe zu initialisieren. Dann können Sie ganzzahlige Indizes für das Ergebnis verwenden:Denken Sie daran, dass Wörterbücher von Natur aus ungeordnet sind. Erwarten Sie also nicht, dass der Schlüssel an einem bestimmten Index immer gleich ist.
quelle
Array(myDict)[0].0
da es das Schlüsselarray nicht kopieren würde und die internen Strukturen des Wörterbuchs nicht kopieren sollte, obwohl dies möglich wäre.myDict[keysArray[0]]
.'NSDictionary' is not convertible to '_ArrayBuffer<T>'
Swift 3:
Array()
kann dazu nützlich sein.Schlüssel abrufen:
Wert erhalten :
quelle
["a": 1, "b": 2]
kann in ein Array von Wörterbüchern umgewandelt werden[[key: "a", value: 1], [key: "b", value: 2]]
, auf die dann über den Index zugegriffen werden kann.Hier ist eine kleine Erweiterung für den Zugriff auf Schlüssel und Werte im Wörterbuch nach Index:
quelle
Sie können ein Wörterbuch durchlaufen und einen Index mit for-in und enumerate abrufen (wie andere gesagt haben, gibt es keine Garantie dafür, dass es wie unten beschrieben bestellt wird).
Wenn Sie zuerst sortieren möchten ..
dann iterieren.
Wenn Sie ein geordnetes Wörterbuch erstellen möchten, sollten Sie sich Generics ansehen.
quelle
dict.enumerated().forEach { (index, element) in ... }
Unter https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/CollectionTypes.html :
Wenn Sie die Schlüssel oder Werte eines Wörterbuchs mit einer API verwenden müssen, die eine Array-Instanz verwendet, initialisieren Sie ein neues Array mit der Eigenschaft keys oder values:
quelle
SWIFT 3. Beispiel für das erste Element
quelle
In Swift 3 versuchen , diesen Code zu verwenden Key-Wert - Paar (Tupel) an bestimmten Index zu erhalten:
quelle
Hier ist ein Beispiel mit Swift 1.2
quelle
SWIFT 4
Etwas abseits des Themas: Aber hier ist, wenn Sie ein Array von Wörterbüchern haben, d. H. [[String: String]]
quelle
Ich suchte nach so etwas wie einer LinkedHashMap in Java. Weder Swift noch Objective-C haben eine, wenn ich mich nicht irre.
Mein erster Gedanke war, mein Wörterbuch in ein Array zu packen.
[[String: UIImage]]
aber dann wurde mir klar, dass es verrückt war, den Schlüssel aus dem Wörterbuch zu holen,Array(dict)[index].key
also ging ich mit Tuples. Jetzt sieht mein Array so aus,[(String, UIImage)]
dass ich es abrufen kanntuple.0
. Keine Konvertierung mehr in ein Array. Nur meine 2 Cent.quelle