Suche Array mit Dictionaries für Wert in Swift
Ich bin neu in Swift und unter einer Klasse zu lernen, iOS-Programmierung. Ich finde mich ratlos an, wie die Suche in einem array von Wörterbüchern für ein string-Wert, und sichern Sie die Zeichenfolge in ein array. Dies ist aus meiner Xcode Spielplatz.
Ich versuche, herauszufinden, wie man:
1) Suche über ein array von dictionaries
2) sichern Sie die Ergebnisse der Suche in einem array (die ich erstellt habe)
Diese sind der Charakter Wörterbücher.
let worf = [
"name": "Worf",
"rank": "lieutenant",
"information": "son of Mogh, slayer of Gowron",
"favorite drink": "prune juice",
"quote" : "Today is a good day to die."]
let picard = [
"name": "Jean-Luc Picard",
"rank": "captain",
"information": "Captain of the USS Enterprise",
"favorite drink": "tea, Earl Grey, hot"]
Dies ist ein array von Zeichen-Wörterbücher die oben aufgeführt sind.
let characters = [worf, picard]
Dies ist die Funktion, die ich bin versucht zu schreiben.
func favoriteDrinksArrayForCharacters(characters:Array<Dictionary<String, String>>) -> Array<String> {
//create an array of Strings to dump in favorite drink strings
var favoriteDrinkArray = [String]()
for character in characters {
//look up favorite drink
//add favorite drink to favoriteDrinkArray
}
return favoriteDrinkArray
}
let favoriteDrinks = favoriteDrinksArrayForCharacters(characters)
favoriteDrinks
Ich wäre dankbar für jede Hilfe auf, wie man vorwärts auf diese. Ich habe gegraben, um für die Beispiele, aber ich bin zu kurz kommen finden, das ist für was ich versuche zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Innerhalb der Schleife, müssen Sie Holen Sie sich das "Lieblingsgetränk" Eintrag aus dem Wörterbuch, und fügen es dem array:
Beachten Sie, dass die
if let drink =
schützt gegen die Möglichkeit, gibt es keinen solchen Eintrag in dem array gibt – falls nicht, erhalten Sie einenil
zurück, und dieif
ist die Kontrolle für Sie, dass, nur hinzufügen den Eintrag, wenn es nicht null.Könnte man manchmal Leute sehen, überspringen Sie die
if let
Teil und stattdessen nur schreibenlet drink = character["favorite drink"]!
mit Ausrufezeichen am Ende. Dies nicht tun. Dies ist bekannt als "Kraft-unwrapping" optional, und wenn es einmal kein Gültiger Wert zurückgegeben, aus dem Wörterbuch, wird Ihr Programm Abstürzen.Das Verhalten bei dem ersten Beispiel ist, wenn es kein Getränk, das Sie don ' T fügen Sie es in das array. Aber das kann nicht sein, was Sie wollen, da darf man erwarten, dass eine 1-zu-1 Korrespondenz zwischen den Einträgen in der Zeichen-array und Einträge in der Getränke-array.
Wenn das der Fall ist, und Sie vielleicht wollen ein leerer string, Sie könnten dies tun, statt:
Den
.map
bedeutet: laufen Sie durch jeden Eintrag incharacters
, und stellen Sie das Ergebnis der Ausführung dieser Ausdruck in einem neuen array (mit dem du dann zurück).Den
??
bedeutet: wenn Sie wieder einenil
von der linken Seite, ersetzen Sie es mit dem Wert auf der rechten Seite.Airspeed-Geschwindigkeit die Antwort ist sehr umfangreich und bietet eine Lösung, die funktioniert. Ein kompakter Weg, das gleiche Ergebnis ist mit der
filter
undmap
Methoden der swift-arrays:Den filter nimmt eine Schließung der Rückgabe ein boolescher Wert, der besagt, ob ein element enthalten sein muss oder nicht - in unserem Fall, prüft es die Existenz von einem element zum Schlüssel
"favorite drink"
. Diese Methode gibt das array von dictionaries Befriedigung dieser Bedingung.Zweiten Schritt verwendet die
map
Methode zum transformieren jedes Wörterbuch, in die der zugehörige Wert der"favorite drink
" Schlüssel - unter Berücksichtigung, dass ein Wörterbuch-lookup gibt immer eine optionale (Konto für fehlende Schlüssel), und dass die filter bereits ausgeschlossen alle Wörterbücher nicht dass ein Wert für diesen Schlüssel besitzt, ist es sicher zu gelten, die erzwungene unwrapping Betreiber!
zu geben ein nicht optionaler string.Das kombinierte Ergebnis ist ein array von strings - kopiert aus meinem Spielplatz:
oder
Kann es helfen, Sie
ich habe array von Kunden ,jedem Kunden mit Namen,die Telefonnummer und andere stubs .ich verwendete den folgenden code, um die Suche nach der Telefonnummer in das array mit dictionary search bar