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)