辞書の値のいずれかに文字列が存在するかどうかを確認したい
Dictionary<String, AnyObject>
配列には.containsがあるので、辞書にもあると思います。 Xcodeは、次を入力し始めるときに次を使用するように指示します。
countDic.contains(where: { ((key: String, value: AnyObject)) -> Bool in
<#code#>
})
ブール値を返す必要があることを知っているので、これを使用する方法がわかりませんが、探している文字列をどこに置くかはわかりません。どんな助けでも素晴らしいでしょう。
contains(where:)
は、コレクションのいずれかの要素が指定された述語を満たしているかどうかをチェックするため、あなたの場合は次のようになります。
_let b = countDic.contains { (key, value) -> Bool in
value as? String == givenString
}
_
または、辞書のvalues
ビューに直接適用します。
_let b = countDic.values.contains { (value) -> Bool in
value as? String == givenString
}
_
どちらの場合も、指定された文字列と比較するために、(オプションで)AnyObject
をString
にキャストする必要があります。
文字列はEquatable
であり、contains(element:)
メソッドを使用できるため、タイプ_Dictionary<String, String>
_の辞書を使用すると少し簡単になります。
_let b = countDic.values.contains(givenString)
_
値はAnyObject
– Any
in Swift 3-であるため、値が文字列であるかどうかを確認する必要があります。はいの場合は、値にサブ文字列が含まれているかどうかを確認してください。
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
}
ただし、値のいずれかが等しい(含むではなく)文字列であるかどうかを確認する場合は、filter
関数とisEmpty
も使用できます。
!countDic.filter { (key, value) -> Bool in
value as? String == "foo"
}.isEmpty
最初にDictionary
sのcontains(where:)
の基本的な使用法を学ぶ必要があるかもしれません。
にとって [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
にとって [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
したがって、[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
だから、あなたの場合:
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