El diccionario contiene un cierto valor swift 3

Quiero comprobar si una cadena que existe en cualquiera de los valores en mi Diccionario

Dictionary<String, AnyObject>

Sé matrices tiene .contiene lo que podría pensar un diccionario también lo hace. Xcode me dice usar la siguiente cuando empiezo a teclear contiene

countDic.contains(where: { ((key: String, value: AnyObject)) -> Bool in
            <#code#>
        })

Yo lo que no entiendo es cómo utilizar este sé que dentro de devolución de un tipo Bool, pero no entiendo donde puedo poner lo que la Cadena de estoy buscando. Cualquier ayuda sería genial.

  • cuando usted está utilizando decir tuplas o una estructura o clase, a menudo el código como este es muy útil (things.map{$0.field}).contains(blah)

3 Kommentare

  1. 10

    contains(where:) comprueba si algún elemento de la colección satisface
    el dado de predicado, por lo que en su caso sería

    let b = countDic.contains { (key, value) -> Bool in
        value as? String == givenString
    }

    o, directamente aplicado a la values vista del diccionario:

    let b = countDic.values.contains { (value) -> Bool in
        value as? String == givenString
    }

    En ambos casos es necesario (opcionalmente) emitir el AnyObject
    a un String a fin de compararla con la cadena dada.

    Sería un poco más fácil con un diccionario de tipo
    Dictionary<String, String> porque las cadenas son Equatable,
    y el contains(element:) método puede ser utilizado:

    let b = countDic.values.contains(givenString)
  2. 3

    Ya que sus valores son AnyObjectAny en Swift 3 – usted tiene que comprobar si el valor es una cadena. Si sí comprobar si el valor contiene la subcadena.

    let countDic : [String:Any] = ["alpha" : 1, "beta" : "foo", "gamma" : "bar"]
    
    countDic.contains { (key, value) -> Bool in
      if let string = value as? String { return string.contains("oo") }
      return false
    }

    Sin embargo, si desea verificar si alguno de los valores es igual a (en lugar de contiene) de una cadena, se podría utilizar también la filter función y isEmpty

    !countDic.filter { (key, value) -> Bool in
      value as? String == "foo"
    }.isEmpty
  3. 1

    Usted puede necesitar para aprender el uso básico de contains(where:) para Dictionarys primera:

    Para [String: Int]:

    let myIntDict1: [String: Int] = [
        "a" : 1,
        "b" : 101,
        "c" : 2
    ]
    let myIntDict1ContainsIntGreaterThan100 = myIntDict1.contains {
        key, value in //<- `value` is inferred as `Int`
        value > 100 //<- true when value > 100, false otherwise
    }
    print(myIntDict1ContainsIntGreaterThan100) //->true

    Para [String: String]:

    let myStringDict1: [String: String] = [
        "a" : "abc",
        "b" : "def",
        "c" : "ghi"
    ]
    let myStringDict1ContainsWordIncludingLowercaseE = myStringDict1.contains {
        key, value in //<- `value` is inferred as `String`
        value.contains("e") //<- true when value contains "e", false otherwise
    }
    print(myStringDict1ContainsWordIncludingLowercaseE) //->true

    Así, con [String: AnyObject]:

    let myAnyObjectDict1: [String: AnyObject] = [
        "a" : "abc" as NSString,
        "b" : 101 as NSNumber,
        "c" : "ghi" as NSString
    ]
    let myAnyObjectDict1ContainsWordIncludingLowercaseE = myAnyObjectDict1.contains {
        key, value in //<- `value` is inferred as `AnyObject`
        //`AnyObject` may not have the `contains(_:)` method, so you need to check with `if-let-as?`
        if let stringValue = value as? String {
            return value.contains("e") //<- true when value is a String and contains "e"
        } else {
            return false //<- false otherwise
        }
    }
    print(myAnyObjectDict1ContainsWordIncludingLowercaseE) //->false

    Así que, en su caso:

    let countDic: [String: AnyObject] = [
        "a" : 1 as NSNumber,
        "b" : "no" as NSString,
        "c" : 2 as NSNumber
    ]
    let countDicContainsString = countDic.contains {
        key, value in //<- `value` is inferred as `AnyObject`
        value is String //<- true when value is a String, false otherwise
    }
    print(countDicContainsString) //->true

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea