2015-09-21 16 views

cevap

15
func findKeyForValue(value: String, dictionary: [String: [String]]) ->String? 
{ 
    for (key, array) in dictionary 
    { 
     if (array.contains(value)) 
     { 
      return key 
     } 
    } 

    return nil 
} 

arayacak yukarıdaki fonksiyon isteğe bağlı bir String döndürmek?

let drinks = ["Soft Drinks": ["Cocoa-Cola", "Mountain Dew", "Sprite"], 
     "Juice" :["Orange", "Apple", "Grape"]] 

print(self.findKeyForValue("Orange", dictionary: drinks)) 

Bu fonksiyon geçirilen değere sahip dizisinin sadece birinci anahtarın döner.

+0

sorunumu çözüldü için

(dic as NSDictionary).allKeysForObject(<#T##anObject: AnyObject##AnyObject#>) 

o iş. Teşekkür ederim. – Statik

+1

Birden fazla olsa bile yalnızca ilk anahtarı döndürür. – zaph

+0

fonk findKeysForValue (value: Sözlük: [dize: [dize]]) -> [dize] { var tuşları = [dize]() sözlükte { halinde (dizi (anahtar, dizi) için . yardım için (değer)) { keys.append (anahtar) } } dönüş tuşları } – abintom

2

Numaralandırma ve istediğiniz değeri her bir değer listesini test ve değer mevcut olduğu anahtarlarını birikir.

let drinks = [ 
    "Soft Drinks": ["Orange", "Cocoa-Cola", "Mountain Dew", "Sprite"], 
    "Juice" :["Apple", "Grape"] 
] 

let value = "Orange" 

var keys = [String]() 
for (key, list) in drinks { 
    if (list.contains(value)) { 
     keys.append(key) 
    } 
} 

print("keys: \(keys)") 

tuşları:

Örnek, bir listede istenen değeri dahil tüm içecekler bulur [ "Meşrubat"]

8

Swift 2.0'da, sözlüğü filtreleyebilir ve ardından sonucu bir diziye eşleyebilirsiniz.

let keys = drinks.filter { 
    return $0.1.contains("Orange") 
}.map { 
    return $0.0 
} 

sonuç uygun tuşlarına temsil String nesnenin bir dizi olacaktır.

+1

Works, döndüren değerlere sahip, ancak şifreli tüm anahtarları döndürür. – zaph

+0

"Cryptic" filtre göz önünde bulundurulduğunda sert bir kelimedir ve harita yüksek mertebeden işlevlerdir. Sözdizimi günümüzde modası geçmiş, ancak bu konuda –

-2

bu (swift) deneyin: Beni

+0

(NSDictionary olarak içecekler) .allKeysForObject ("Turuncu") istediği gibi "Suyu" değil, boş bir dizi döndürür. Bu arada, soruda yazılmıştır. Lütfen, yayınlamadan önce cevabınızı bir oyun alanında veya başka bir şekilde doğrulayın. – user3441734

+0

sakin ol. Başka birinin benzer bir soruna sahip olması için genel bir şablon yazarım. hiçbir parametre yazmam. cevabımı çok okuyorsun –