क्या दो सामान्य शब्दकोशों के बीच अंतर खोजने के लिए एक LINQ विधि है?
this question में समान है, लेकिन सामान्य शब्दकोशों के साथ।दो शब्दकोशों के बीच अंतर खोजना
उत्तर
var diff = dicOne.Except(dicTwo).Concat(dicTwo.Except(dicOne));
क्या यह विधि केवल कुंजी की तुलना करता है? –
@ bto.rdz नहीं, दोनों कुंजी और मान। – Magnus
उत्कृष्ट लेकिन 'शून्य' की जांच करना न भूलें –
ऐसा कुछ?
var dicOne = new Dictionary<string, string>(){ {"asdf", "asdf"}, {"few","faew"}};
var dicTwo = new Dictionary<string, string>(){ {"asdf", "asdf"}};
var unContained = dicOne.Where(x => !dicTwo.Contains(x));
उन तत्वों को केवल' dictTwo' में नहीं बल्कि 'dictOne' में नहीं है। –
तो प्रदर्शन के लिए महत्वपूर्ण है, तो आप शब्दकोश वर्ग के हैश देखने का उपयोग करें और गति में सुधार लाने के लिए चाहते हो सकता है। मैंने 1 मिलियन प्रविष्टियों के साथ एक शब्दकोश का परीक्षण परिदृश्य लिया, इसे गहराई से कॉपी किया और प्रतिलिपि में 10 संपादन (5 प्रविष्टियां हटा दी गईं, 5 जोड़े) बनाई। [मेरे पास ऐसा करने का एक कार्य था जिसमें डेटा में परिवर्तन की तलाश शामिल थी, और उसके बाद केवल दूसरे फ़ंक्शन के माध्यम से परिवर्तनों को दबाया गया था।]
LINQ के साथ (मैग्नस का उत्तर देखें) स्टॉपवॉच के अनुसार लगभग 3600ms था। Dictionary.Contains() का उपयोग करके सरल तुलना के साथ, समय बीत गया 600ms लगभग था। पर्यावरण एक ही मशीन पर एक ConsoleApp परीक्षण दोहन के लिए डीबग मोड में विजुअल स्टूडियो 2017 समुदाय था।
आपका माइलेज भिन्न हो सकता है, और आपके पास लाइनों की मामूली संख्या हो सकती है, इसलिए इससे कोई फर्क नहीं पड़ता, लेकिन बड़े शब्दकोशों के लिए यह डिक्शनरी क्लास की लुकअप कार्यक्षमता का उपयोग करने का भुगतान करता है।
public static void DiffDictionaries<T, U>(
Dictionary<T, U> dicA,
Dictionary<T, U> dicB,
Dictionary<T, U> dicAdd,
Dictionary<T, U> dicDel)
{
// dicDel has entries that are in A, but not in B,
// ie they were deleted when moving from A to B
diffDicSub<T, U>(dicA, dicB, dicDel);
// dicAdd has entries that are in B, but not in A,
// ie they were added when moving from A to B
diffDicSub<T, U>(dicB, dicA, dicAdd);
}
private static void diffDicSub<T, U>(
Dictionary<T, U> dicA,
Dictionary<T, U> dicB,
Dictionary<T, U> dicAExceptB)
{
// Walk A, and if any of the entries are not
// in B, add them to the result dictionary.
foreach (KeyValuePair<T, U> kvp in dicA)
{
if (!dicB.Contains(kvp))
{
dicAExceptB[kvp.Key] = kvp.Value;
}
}
}
- 1. क्या गिट का उपयोग करके दो मनमानी पाठ फ़ाइलों के बीच अंतर खोजना संभव है?
- 2. मानचित्र दो शब्दकोशों
- 3. दो तिथियों के बीच दिन अंतर
- 4. दो शीर्षलेखों के बीच अंतर प्राप्त करना
- 5. दो पथों के बीच नोडज अंतर
- 6. दो SYSTEMTIME चर के बीच अंतर
- 7. दो गिट भंडारों के बीच अंतर ढूँढना
- 8. दो निपटान कार्यान्वयन के बीच अंतर?
- 9. अंतर, मिनटों में, दो तिथियों के बीच
- 10. दो निर्देशिकाओं की सामग्रियों के बीच अंतर
- 11. बैश - दो सूचियों के बीच अंतर
- 12. सेकेंड में दो तिथियों के बीच एंड्रॉइड अंतर
- 13. सेकेंड में दो डेटाटाइम के बीच अंतर ढूंढें
- 14. एक ही कक्षा के दो उदाहरणों के बीच अंतर
- 15. आयत के रूप में दो आयताकारों के बीच अंतर (एक्सओआर)?
- 16. 2 शब्दकोशों के बीच "कुंजी" अंतर खोजने के लिए संक्षिप्त तरीका?
- 17. दो तिथियों के बीच एसक्यूएल समय अंतर एचएच: मिमी: एसएस
- 18. दो पंक्तियों के बीच समय अंतर की गणना करें
- 19. दो तारों के बीच अंतर कैसे प्राप्त करें?
- 20. दो लगभग समान तस्वीरों के बीच अंतर निर्धारित करें
- 21. इन दो बयानों के बीच क्या अंतर है
- 22. इन दो सी ++ कोड ब्लॉक के बीच क्या अंतर है?
- 23. दो एसक्यूएल में शामिल होने के बीच क्या अंतर है?
- 24. इन दो फ़ंक्शन प्रकार परिभाषाओं के बीच क्या अंतर है?
- 25. दो मानों के बीच समय अंतर प्राप्त करना
- 26. मैं दो तिथियों के बीच, सेकंड में अंतर कैसे देखूं?
- 27. JQuery: इन दो बयानों के बीच क्या अंतर है?
- 28. एंड्रॉइड जावा प्रतिशत बिटमैप पिक्सेल अंतर दो छवियों के बीच
- 29. उसी प्रकार की दो इकाइयों के बीच अंतर खोजें
- 30. इन दो कोड नमूने के बीच क्या अंतर है?
आप 'AsEnumerable' का उपयोग एक' IEnumerable 'में अपने शब्दकोश" कन्वर्ट "करने के लिए कर सकता है, और उसके बाद का उपयोग समाधान से जुड़ा हुआ प्रश्न में सुझाव दिया। चूंकि KeyValuePair एक संरचना है, इसलिए इसे मूल्य से तुलना करनी चाहिए। –
Heinzi
आपको 'AsEnumerable' की आवश्यकता नहीं है, क्योंकि यह बिल्कुल कोई रूपांतरण नहीं करता है। 'IENumerable' एक्सटेंशन में इंटेलिजेंस विधियों को सीमित करने के साथ-साथ ऑब्जेक्ट्स पर 'IENumerable ' एक्सटेंशन का उपयोग करने की इजाजत देने के लिए इंटेलिजेंस विधियों को सीमित करने के लिए यह केवल एक सुविधाजनक तरीका है जो 'IQueryable ' को लागू करने की आवश्यकता के बिना लागू करता है। –
Nuffin
'dic1.Except (x => dic2.Contains (x)) संघ (dic2.Except (x => dic1.Contais (X)); ', क्या आप बेहतर तरीका चाहते हैं? –