2016-10-16 4 views
7

मैं एक स्ट्रिंग मेरे शब्दकोश में से कोई भी मान में मौजूद रहने पर जाँच करना चाहते हैं। Xcode जब मैं लिखना शुरूशब्दकोश</p> <pre><code>Dictionary<String, AnyObject> </code></pre> <p>मैं सरणियों पता है .contains तो मैं एक शब्दकोश भी करता है लगता होगा एक निश्चित मूल्य तेजी से 3

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

शामिल मैं सिर्फ समझ में नहीं आता इस मुझे पता है कि उपयोग करने के लिए अंदर मैं एक बूल वापस जाने के लिए की जरूरत है निम्नलिखित का उपयोग करने मुझसे कहता है, लेकिन मुझे समझ नहीं आता जहां मैं क्या स्ट्रिंग डाल मैं देख रहा हूँ। कोई भी मदद बहुत अच्छी रहेगी।

+0

जब आप उपयोग कर रहे tuples या एक struct या वर्ग कहते हैं, अक्सर इस तरह का कोड आसान है '(things.map {$ 0.field})। इसमें (blah) 'है – Fattie

उत्तर

8

contains(where:) चेकों का इस्तेमाल कर सकते है जाँच करना चाहते हैं लेकिन अगर यदि संग्रह का कोई तत्व दिए गए अनुमान को संतुष्ट करता है, तो आपके मामले में यह

होगा

या, सीधे शब्दकोश की values दृश्य पर लागू:

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

दोनों ही मामलों में यह जरूरी है कि में (वैकल्पिक) AnyObject एक String को आदेश दिया स्ट्रिंग के साथ तुलना करना में डाली।

यह प्रकार Dictionary<String, String> क्योंकि तार कर रहे हैं Equatable, का एक शब्दकोश और contains(element:) विधि के साथ थोड़ा आसान इस्तेमाल किया जा सकता होगा:

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

चूंकि आपके मूल्य AnyObject - Any स्विफ्ट 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 
1

आप पहली बार Dictionary रों लिए 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 
संबंधित मुद्दे