2016-04-11 9 views
0

Ich möchte überprüfen, ob eine Zeichenkette eine Zeichenkette in einem Wörterbuch enthält. Das Wörterbuch ordnet EKCalendar-Objekte Arrays von Strings zu. Der Code unten arbeitet für den anderen Weg, umCheck in Swift, ob die Zeichenkette eine der Teilzeichenfolgen in einem Wörterbuch enthält

// 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

Problem ist, dass die Tasten sind eigentlich nicht Ints aber eine andere Datenstruktur (EKCalendar). Ich habe gerade Ince benutzt, um das Problem beim Stack-Überlauf zu vereinfachen. Wird meine Frage aktualisieren. – Daniel

Antwort

1

Zur Lösung der youre Ausgabe schreiben i-Funktion, die erkennt, wenn das Element ein Teil der Zeichenfolge (Prüfen, ob das Wörterbuch die Zeichenfolge enthält.):

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

als ich ordnen Sie sind Wörterbuch:

let keys = dict.filter { 
    return ifItemExistInString($0.1) 
    }.map { 
     return $0.0 
} 
Verwandte Themen