Dictionary 字典包含一个特定的值swift 3

Dictionary 字典包含一个特定的值swift 3,dictionary,swift3,Dictionary,Swift3,我想检查字典中的任何值中是否存在字符串 Dictionary<String, AnyObject> 字典 我知道数组有。包含,所以我想字典也有。Xcode告诉我在开始键入contains时使用以下命令 countDic.contains(where: { ((key: String, value: AnyObject)) -> Bool in <#code#> }) countDic.contains(其中:{((键:字

我想检查字典中的任何值中是否存在字符串

Dictionary<String, AnyObject>
字典
我知道数组有。包含,所以我想字典也有。Xcode告诉我在开始键入contains时使用以下命令

countDic.contains(where: { ((key: String, value: AnyObject)) -> Bool in
            <#code#>
        })
countDic.contains(其中:{((键:字符串,值:AnyObject))->Bool-in
})

我只是不知道如何使用它,我知道在里面我需要返回一个Bool,但我不知道我把我要找的字符串放在哪里。任何帮助都很好。

因为您的值是Swift 3中的
AnyObject
Any
,所以您必须检查该值是否为字符串。如果是,请检查该值是否包含子字符串

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
}
但是,如果要检查是否有任何值等于(而不是包含)字符串,也可以使用
过滤器
函数和
isEmpty

!countDic.filter { (key, value) -> Bool in
  value as? String == "foo"
}.isEmpty
包含(其中:)
检查集合的任何元素是否满足 给定的谓词,因此在您的情况下

let b = countDic.contains { (key, value) -> Bool in
    value as? String == givenString
}
或者,直接应用于字典的
视图:

let b = countDic.values.contains { (value) -> Bool in
    value as? String == givenString
}
在这两种情况下,都有必要(可选)强制转换
AnyObject
字符串
,以便将其与给定字符串进行比较

有一本类型的字典会稍微容易一些
字典
因为字符串是可平等的
, 可以使用
包含(元素:)
方法:

let b = countDic.values.contains(givenString)

您可能需要先了解
contains(其中:)
对于
Dictionary
s的基本用法:

对于
[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
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
因此,使用
[String:AnyObject]

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
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
让myAnyObjectDict1:[字符串:AnyObject]=[
“a”:“abc”作为字符串,
“b”:101作为NSN编号,
“c”:“ghi”作为NSString
]
让MyAnyObjectDict1ContainsWorldIncludingLowercasee=myAnyObjectDict1.contains{

key,value in//当您使用元组或结构或类时,这样的代码通常很方便
(things.map{$0.field})。contains(blah)