Da Sie nur daran interessiert sind in jeder Einstimmungswert, können Sie verwenden die indexOf()
Methode, um den ersten passenden Wörterbucheintrag zu finden. Dies funktioniert, weil ein Wörterbuch eine Sammlung von Schlüssel/Wert-Paaren ist.
Swift 2:
let dict = ["foo": "bar", "PQRS": "baz"]
let searchTerm = "S"
if let index = dict.indexOf({ (key, _) in key.containsString(searchTerm) }) {
let value = dict[index].1
print(value)
} else {
print("no match")
}
Sobald ein passender Schlüssel gefunden wird, das Prädikat liefert true
und die Aufzählung stoppt. Der index
ist ein "Wörterbuchindex", der direkt zum Abrufen des entsprechenden Wörterbucheintrags verwendet werden kann.
Für Groß- und Kleinschreibung Schlüssel suchen, durch das Prädikat ersetzen
{
(key, _) in key.rangeOfString(searchTerm, options: .CaseInsensitiveSearch) != nil
}
In Swift 3 Sie first(where:)
verwenden können, das erste passende Element zu finden, das eine Wörterbuchsuche spart:
if let entry = dict.first(where: { (key, _) in key.contains(searchTerm) }) {
print(entry.value)
} else {
print("no match")
}
Für eine Schlüsselsuche ohne Groß-/Kleinschreibung ersetzen Sie das Prädikat durch
Wenn ich keine Groß-/Kleinschreibung brauche, weil ich weiß, dass Strings alle Großbuchstaben sind, kann ich key.contains() anstelle von key.range() verwenden oder ist key.range() schneller? – Adeline
@Adeline: Ich denke nicht, dass es einen Unterschied macht, aber 'key.contains()' ist einfacher, also würde ich das verwenden. –
Alle drei Antworten sind gültig, aber seine eine ist die schnellste. – Adeline