2016-04-11 23 views
0

Bir dizenin sözlükteki dizelerden birini içerip içermediğini kontrol etmek istiyorum. Sözlük, EKCalendar nesnelerini dizelerden oluşan dizilere eşler. Aşağıdaki kod bunun tersi geçerlidir çalışırDize, dizgenin bir sözlükteki alt dizelerden birini içerip içermediğini kontrol edin

// cal1, cal2, cal3 are of type EKCalendar 
let dict = [cal1 : ["this is", "another test case"], cal2 : ["red color", "green color"], cal3 : ["Hello World", "how are", "you"]] 

let stringToCheckContent = "this is one of my sample sentences" 
let keys = dict.filter { 
// return $0.1.contains(stringToCheckContent)  // This of course works for the inverse case - if i check whether dictionary has as a part the stringToCheckContent. 
    return stringToCheckContent.contains($0.1)  // should return cal1. However I get "Value of type 'String' has no member 'contains'. 
    }.map { 
     return $0.0 
} 
+0

sorun tuşları aslında Ints değil ama başka bir veri yapısı (EKCalendar) olmasıdır. Yığın taşması problemini basitleştirmek için sadece İnce'yi kullandım. Sorumu günceller. – Daniel

cevap

1

youre sorunun çözümü için öğe dize bir parçası olup olmadığını tespit olduğunu ben işlevi yazıp (sözlük dize içerip içermediğini kontrol.):

func ifItemExistInString(vals: Array<String>) -> Bool { 
    var state = false 
    vals.forEach { (key: String) ->() in 
     if (stringToCheckContent.lowercaseString.rangeOfString(key) != nil) { 
      state = true 
     } 
    } 
    return state 
} 

i map daha eğer Sözlük konum:

let keys = dict.filter { 
    return ifItemExistInString($0.1) 
    }.map { 
     return $0.0 
} 
İlgili konular