किसी भी डुप्लीकेट को अनदेखा तारों की सूची को स्टोर करने का सबसे प्रभावी तरीका क्या है? मैं सोच रहा था कि एक शब्दकोश डिक्शनरी [str] = false लिखकर सबसे अच्छा स्ट्रिंग डालने वाला हो सकता है; और एक सूची के रूप में कुंजी के माध्यम से गणना। क्या यह एक अच्छा समाधान है?अद्वितीय तारों की कुशल सूची सी #
उत्तर
यदि आप .NET 3.5 का उपयोग कर रहे हैं, तो HashSet आपके लिए काम करना चाहिए।
HashSet < (< के (टी>)>) वर्ग उच्च प्रदर्शन सेट आपरेशन प्रदान करता है। एक सेट एक संग्रह है जिसमें डुप्लिकेट तत्व नहीं हैं, और जिनके तत्व किसी विशेष क्रम में नहीं हैं।
यह सिस्टम नेमस्पेस का हिस्सा नहीं है, लेकिन नेइबेरनेट के साथ http://www.codeproject.com/KB/recipes/sets.aspx से Iesi.Collections का उपयोग किया है। इसमें सॉर्ट किए गए सेट, डिक्शनरी सेट आदि के साथ हैश सेट के लिए समर्थन है। चूंकि इसका उपयोग एनएचबेर्नेट के साथ किया गया है, इसका उपयोग बड़े पैमाने पर और बहुत स्थिर किया गया है। यह भी नेट की आवश्यकता नहीं है 3.5
आप इस
var hash = new HashSet<string>();
var collectionWithDup = new []{"one","one","two","one","two","zero"};
// No need to check for duplicates as the Add method
// will only add it if it doesn't exist already
foreach (var str in collectionWithDup)
hash.Add(str);
आपको हैशसेट के साथ चेक की आवश्यकता नहीं है।आप केवल ऐड विधि को सीधे कॉल कर सकते हैं और आइटम पहले से मौजूद है या नहीं, इस पर निर्भर करता है कि यह सही या गलत होगा। – LukeH
अनावश्यक कंटेनर में कॉल को हटाने के लिए उत्तर संपादित किया जाना चाहिए। काम करने के लिए उपरोक्त उदाहरण के लिए आपको यह सब कुछ चाहिए: var collectionWithDup = new [] {"one", "one", "two", "one", "two", "zero"}; var uniqueValues = new हैशसेट
की तरह कुछ करने के लिए मुझे यकीन है कि नहीं कर रहा हूँ अगर यह एक अच्छा जवाब के रूप में गिना जाता है, लेकिन देख सकते हैं जब एक अद्वितीय सेट के लिए की जरूरत का सामना करना पड़ जो सम्मिलन आदेश को बनाए रखता है, मैंने हैशसेट और एक सूची के साथ एक समझौता किया। इस मामले में, जब भी आप सेट में जोड़ते हैं, तो निम्न कार्य करें:
if(hashSet.Add(item))
orderList.Add(item);
आइटम को हटाते समय, उन्हें दोनों से निकालना सुनिश्चित करें। इस प्रकार, जब तक आप यह सुनिश्चित कर सकें कि सूची में कुछ और आइटम नहीं जोड़े गए हैं, तो आपके पास एक प्रविष्टि-आदेश दिया गया अद्वितीय सेट होगा!
हैशसेट का उपयोग करें, जांचने की कोई आवश्यकता नहीं है। कॉन्टैन्स(), बस अपनी वस्तुओं को सूची में जोड़ें और यदि इसका डुप्लिकेट इसे जोड़ नहीं देगा।
HashSet<int> uniqueList = new HashSet<int>();
uniqueList.Add(1); // List has values 1
uniqueList.Add(2); // List has values 1,2
uniqueList.Add(1); // List has values 1,2
Console.WriteLine(uniqueList.Count); // it will return 2
यहाँ HashSet
का उपयोग किए बिना एक और उपाय है।
var items = new List<string>() { "one", "one", "two", "one", "two", "zero" };
var uniqueItems = items.Where((item, index) => items.IndexOf(item) == index);
यह इस धागे से अपनाया गया था: javascript - Unique values in an array
टेस्ट: List
, HashSet
और SortedSet
के लिए
using FluentAssertions;
uniqueItems.Count().Should().Be(3);
uniqueItems.Should().BeEquivalentTo("one", "two", "zero");
प्रदर्शन परीक्षण। 1 लाख पुनरावृत्तियों:
List: 564 ms
HashSet: 487 ms
SortedSet: 1932 ms
तुम भी में के रूप में इस्तेमाल कर सकते हैं Linq:
using System.Linq;
var items = new List<string>() { "one", "one", "two", "one", "two", "zero" };
List<string> distinctItems = items.Distinct().ToList();
- 1. तारों की सूची
- 2. तारों की सरणी से अद्वितीय संयोजनों की सरणी बनाएं
- 3. तारों की केवल पढ़ने की सूची
- 4. सूची के अद्वितीय संयोजन
- 5. सबसे कुशल सी # शेयरपॉइंट सूची पुनरावृत्ति
- 6. लूप के भीतर से अद्वितीय तारों की सूची बनाने का सबसे तेज़ तरीका?
- 7. सी - संख्यात्मक तारों की तुलना
- 8. तारों की सूची को कैसे क्रमबद्ध करें?
- 9. तारों की सूची में आइटम को
- 10. तारों की सूची से पीईक्यूटी मेनू बनाएं
- 11. सूची में अद्वितीय तत्वों की गणना
- 12. कुशल प्राथमिकता सूची
- 13. सूची से अद्वितीय सूचियां
- 14. कुशल सूची चौराहे एल्गोरिदम
- 15. PostgreSQL: तार के रूप में तारों की सूची कैसे खोजें?
- 16. कुशल सी पूल आवंटक?
- 17. आसानी से std :: तारों की एक std :: सूची शुरू करें?
- 18. कुशल तरीका?
- 19. तारों और सरणी की तुलना सी #
- 20. इकाइयों की सूची अद्यतन करने का कुशल तरीका
- 21. सी/सी ++ कुशल बिट सरणी
- 22. ओक के साथ जावा ढेर विश्लेषण: अद्वितीय तारों की गणना करें
- 23. तारों के बड़े सेट में अस्तित्व की जांच करने का कुशल तरीका
- 24. क्रमांकित तारों की सूची आरंभ करने के लिए त्वरित तरीका?
- 25. तारों की सूची को युगल में कैसे परिवर्तित करें?
- 26. तारों की सूची में एक सामान्य स्ट्रिंग खोजें
- 27. तारों की एक सूची के खिलाफ लगभग खोज
- 28. सूचियों की सूची से अद्वितीय आइटम प्राप्त करें?
- 29. सूची सुनिश्चित करने के लिए कैसे अद्वितीय तत्व हैं?
- 30. डेटाबेस प्रविष्टियों के लिए कुशल अद्वितीय कुंजी पीढ़ी
लेकिन एक 'HashSet' वस्तुओं के आदेश को खो देंगे। एक सुविधा 'सूची' प्रदान करता है। – aggsol
अतिरिक्त: सॉर्टेडसेट भी है जो एक सुविधाजनक सॉर्ट हैशसेट है। –
WhoIsRich
यह भी ध्यान रखें कि सूची में विरोध के रूप में केवल एक गणक के माध्यम से हैशसेट को इंडिस के माध्यम से नहीं पहुंचा जा सकता है। – andrew