2015-12-22 2 views
-3

Скажем, у меня есть следующий словарь [ «Лионель Месси»: «170см»]Проверьте словарь содержит ключ строки

Можно ли найти эту пару ключ-значение, если я знал только часть ключевой строки. Другими словами, можно было бы найти вышеупомянутую пару ключ-значение, если бы у меня была строка «Lione».

+1

yes, вы можете получить доступ к клавишам и найти их для соответствия – luk2302

+0

Не совсем. Для этого вам нужна другая структура данных. Например, [Trie] (https://en.wikipedia.org/wiki/Trie). Или просто выполните поиск по всем значениям, если их не слишком много. – Sulthan

ответ

3
func findPartOfString(partOfKey: String, myDict: Dictionary) -> String { 
    for (key, value) in myDict { 
     if key.containsString(partOfKey) { 
      return value 
     } 
    } 
    return null 
} 

EDIT:

Вот новый короткий путь с Swift2:

func findPartOfString(partOfKey: String, myDict: Dictionary) -> String { 
    for (key, value) in myDict where key.containsString(partOfString) { 
     return value 
    } 
    return null 
+0

Спасибо, я собираюсь проверить это. – NJanf

3
let filter = "Lionel" 
let dict = ["Lionel Messi" : "170cm", "Me" : "Taller"] 
let result = dict.keys.filter { $0.containsString(filter) } 
if let first = result.first { 
    print("match found: (\(first) => \(dict[first]!))") 
} 

Выходы

матч найдено: (Lionel Messi => 170см)

+0

Я тоже попробую это, спасибо. – NJanf

+0

@NJanf ... Ответ, предоставленный luk2302, - это больше типов, которые стремительные хотят использовать разработчиками. Это уменьшает использование «для» циклов и делает код немного чище и более кратким. – Karthik

+1

@ Karthik, в то время как я ценю этот путь, я не уверен, что согласен, что это то, что «быстро хочет». См. Мой обновленный ответ для совершенно нового подхода к циклам в swift 2. Кажется, это сделано именно для этой ситуации. – Tim

Смежные вопросы