2013-02-20 23 views
9

मैं निर्धारित करने के लिए अगर एक Dictionary<string, string> वस्तु सभी कुंजी के रूप में string वस्तुओं का एक सेट की शामिल सबसे अच्छा तरीका है यह पता लगाने की कोशिश कर रहा हूँ शामिल हैं।निर्धारित करें कि शब्दकोश कुंजियों का सेट के सभी

मैं शायद कोई मतलब इसलिए यहाँ नहीं कर रहा हूँ तार का एक निश्चित सेट का उपयोग कुछ उदाहरण कोड है:

public static bool ContainsKeys(this Dictionary<string, string> dictionary) 
{ 
    return dictionary.ContainsKey("fname") && dictionary.ContainsKey("lname") && dictionary.ContainsKey("address1") && 
     dictionary.ContainsKey("city") && dictionary.ContainsKey("state") && dictionary.ContainsKey("zip"); 
} 

विचार यहाँ keys के रूप में तार के एक मनमाना सेट स्वीकार करते हैं और अगर की कुंजी जाँच करने के लिए है Dictionary<string, string> ऑब्जेक्ट में keys में सभी स्ट्रिंग शामिल हैं।

मैं इस के साथ LINQ सड़क के नीचे जाने के लिए कोशिश कर रहा था: हालांकि

public static bool ContainsKeys(this Dictionary<string, string> dictionary, string[] keys) 
{ 
    var query = from entry in dictionary 
       where keys.Contains(entry.Key) 
       select entry; 

    return query.Any(); 
} 

मुझे पता नहीं है, तो मैं सही रास्ते पर हूँ - मुझे लगता है कि अगर मुझे पता है कि अगर dictionary निहित चाहता था इस काम हो सकता है कुंजी के रूप में उन तारों में से कोई भी।

उत्तर

15

ऐसा कुछ आपकी आवश्यकता को पूरा करना चाहिए। निश्चित रूप से अपने तर्कों के आस-पास उचित सत्यापन लागू करें।

return keys.Any() 
    && keys.All(key => dictionary.ContainsKey(key)); 

नोट: मैं शामिल Any क्योंकि Allसच वापस आ जाएगी अगर स्रोत अनुक्रम (कुंजी) वास्तव में खाली है। यदि आपको यह बुरा नहीं लगता है, तो Any के उपयोग को समाप्त करें।

+0

धन्यवाद! 'Keys.Any()' के अतिरिक्त मेरे लिए एक अच्छा विचार है। –

+0

उन लोगों के लिए जो संक्षिप्त संस्करण पसंद करते हैं: 'वापसी कुंजी। कोई() && keys.All (dictionary.ContainsKey);' –

2

LINQ बात की इस तरह के लिए वास्तव में अच्छा है:

public static bool ContainsKeys(this Dictionary<string, string> dictionary, string[] keys) 
{ 
    return keys.All(dictionary.ContainsKey); 
} 
2

यह सुंदर बस All विस्तार विधि का उपयोग किया जा सकता है।

return keys.All(k => dictionary.ContainsKey(k)); 

यह जाँच करेगा कि दिया विधेय (dictionary.ContainsKey(k)) दिया सरणी में सभी चाबियाँ के लिए सच है।

0

यह करना चाहिए, का उपयोग Dictionary में की गई कुंजियों को खत्म करने के लिए करें और जांचें कि कुछ भी बचा है या नहीं;

return !keys.Except(dictionary.Keys).Any(); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^