दिलचस्प पोस्ट
अगले / पिछले तत्व जावास्क्रिप्ट का उपयोग करें मैं अपने वेब एमवीसी अनुप्रयोग में एक एक्सेस कंट्रोल सूची कैसे लागू करूं? क्या स्काला 2.8 संग्रह लाइब्रेरी "इतिहास में सबसे लंबे समय तक आत्महत्या नोट" का मामला है? मैं पायथन में एक MySQL डाटाबेस से कैसे कनेक्ट करूं? क्यों isstream वस्तु एक bool अभिव्यक्ति के रूप में इस्तेमाल किया जा सकता है? @ कंट्रोलर वर्ग में वैल्यू एनोटेशन वसंत @ गुणों की वैल्यू के मूल्यांकन के लिए नहीं है रैवल्यूज़, लावल्यूस, एक्सवल्यूज, ग्लुवेल और प्रोजेल्स क्या हैं? एसक्यूएल का चयन करें जहां फ़ील्ड में शब्द हैं कैसे दृश्य स्टूडियो को आउटपुट निर्देशिका में एक DLL फ़ाइल की प्रतिलिपि बनाने के लिए? क्या यह Files.lines () में एक बग है, या मैं समानांतर धाराओं के बारे में कुछ गलतफहमी है? स्कला में विधि मापदंडों की मान्यता, समझ और मोनाद के लिए श्रोताओं का उपयोग करते हुए एएनएएनएलआरआर में / अगर अन्य बयान IPhone 5 + iOS6 यह तय करेगा कि कोई ऐप लेटबेक्स मोड में चलना चाहिए या नहीं फ़ोन गैप CDVViewController.h फ़ाइल नहीं मिला जब IOS के लिए संग्रह जीडब्ल्यूटीटी मॉड्यूल को (पुनः) संकलित REDUX की आवश्यकता हो सकती है

सी # LINQ सूची में डुप्लिकेट पाते हैं

List<int> से LINQ का उपयोग करके, मैं एक सूची कैसे प्राप्त कर सकता हूँ जिसमें प्रविष्टियों को एक से अधिक बार और उनके मूल्यों को दोहराया गया है?

वेब के समाधान से एकत्रित समाधान "सी # LINQ सूची में डुप्लिकेट पाते हैं"

समस्या का समाधान करने का सबसे आसान तरीका उन तत्वों को उनके मूल्य के आधार पर समूहित करना है, और फिर समूह के एक प्रतिनिधि को चुनना यदि समूह में एक से अधिक तत्व हैं। लिनक में, इसका अनुवाद:

 var query = lst.GroupBy(x=>x) .Where(g=>g.Count()>1) .Select(y=>y.Key) .ToList(); 

यदि आप जानना चाहते हैं कि तत्वों को कितनी बार दोहराया जाता है, तो आप इसका उपयोग कर सकते हैं:

 var query = lst.GroupBy(x=>x) .Where(g=>g.Count()>1) .Select(y=> new { Element = y.Key, Counter = y.Count()}) .ToList(); 

यह एक गुमनाम प्रकार की एक सूची वापस करेगा, और प्रत्येक तत्व में आपके पास आवश्यक जानकारी को पुनः प्राप्त करने के लिए एलिमेंट और काउंटर की संपत्तियां होंगी।

और अंत में, अगर यह एक शब्दकोश है जो आप की तलाश में हैं, तो आप इसका उपयोग कर सकते हैं

 var query = lst.GroupBy(x=>x) .Where(g=>g.Count()>1) .ToDictionary(x=>x.Key,y=>y.Count()); 

यह आपके शब्दकोश के रूप में कुंजी के रूप में एक शब्दकोश लौटाएगा, और इसे मूल्य के रूप में दोहराया जाने की संख्या।

पता करें कि कोई भी गणक में कोई डुप्लिकेट है :

 var anyDuplicate = enumerable.GroupBy(x => x.Key).Any(g => g.Count() > 1); 

पता करें कि एक गणनीय में सभी मान अद्वितीय हैं :

 var allUnique = enumerable.GroupBy(x => x.Key).All(g => g.Count() == 1); 

एक और तरीका HashSet उपयोग कर रहा है:

 var hash = new HashSet<int>(); var duplicates = list.Where(i => !hash.Add(i)); 

यहाँ एक सामान्य विस्तार विधि के रूप में एक ही समाधान है:

 public static class Extensions { public static IEnumerable<TSource> GetDuplicates<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> selector, IEqualityComparer<TKey> comparer) { var hash = new HashSet<TKey>(comparer); return source.Where(item => !hash.Add(selector(item))).ToList(); } public static IEnumerable<TSource> GetDuplicates<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer) { return source.GetDuplicates(x => x, comparer); } public static IEnumerable<TSource> GetDuplicates<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> selector) { return source.GetDuplicates(selector, null); } public static IEnumerable<TSource> GetDuplicates<TSource>(this IEnumerable<TSource> source) { return source.GetDuplicates(x => x, null); } } 

तुम यह केर सकते हो:

 var list = new[] {1,2,3,1,4,2}; var duplicateItems = list.Duplicates(); 

इन विस्तार विधियों के साथ:

 public static class Extensions { public static IEnumerable<TSource> Duplicates<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> selector) { var grouped = source.GroupBy(selector); var moreThen1 = grouped.Where(i => i.IsMultiple()); return moreThen1.SelectMany(i => i); } public static IEnumerable<TSource> Duplicates<TSource, TKey>(this IEnumerable<TSource> source) { return source.Duplicates(i => i); } public static bool IsMultiple<T>(this IEnumerable<T> source) { var enumerator = source.GetEnumerator(); return enumerator.MoveNext() && enumerator.MoveNext(); } } 

डुप्लिकेट विधि में IsMultiple () का उपयोग तेजी से तब होता है () क्योंकि यह पूरे संग्रह को पुनरावृति नहीं करता है

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

उदाहरण:

 //Dummy class to compare in list public class Person { public int Id { get; set; } public string Name { get; set; } public string Surname { get; set; } public Person(int id, string name, string surname) { this.Id = id; this.Name = name; this.Surname = surname; } } //The extention static class public static class Extention { public static IEnumerable<T> getMoreThanOnceRepeated<T>(this IEnumerable<T> extList, Func<T, object> groupProps) where T : class { //Return only the second and next reptition return extList .GroupBy(groupProps) .SelectMany(z => z.Skip(1)); //Skip the first occur and return all the others that repeats } public static IEnumerable<T> getAllRepeated<T>(this IEnumerable<T> extList, Func<T, object> groupProps) where T : class { //Get All the lines that has repeating return extList .GroupBy(groupProps) .Where(z => z.Count() > 1) //Filter only the distinct one .SelectMany(z => z);//All in where has to be retuned } } //how to use it: void DuplicateExample() { //Populate List List<Person> PersonsLst = new List<Person>(){ new Person(1,"Ricardo","Figueiredo"), //fist Duplicate to the example new Person(2,"Ana","Figueiredo"), new Person(3,"Ricardo","Figueiredo"),//second Duplicate to the example new Person(4,"Margarida","Figueiredo"), new Person(5,"Ricardo","Figueiredo")//third Duplicate to the example }; Console.WriteLine("All:"); PersonsLst.ForEach(z => Console.WriteLine("{0} -> {1} {2}", z.Id, z.Name, z.Surname)); /* OUTPUT: All: 1 -> Ricardo Figueiredo 2 -> Ana Figueiredo 3 -> Ricardo Figueiredo 4 -> Margarida Figueiredo 5 -> Ricardo Figueiredo */ Console.WriteLine("All lines with repeated data"); PersonsLst.getAllRepeated(z => new { z.Name, z.Surname }) .ToList() .ForEach(z => Console.WriteLine("{0} -> {1} {2}", z.Id, z.Name, z.Surname)); /* OUTPUT: All lines with repeated data 1 -> Ricardo Figueiredo 3 -> Ricardo Figueiredo 5 -> Ricardo Figueiredo */ Console.WriteLine("Only Repeated more than once"); PersonsLst.getMoreThanOnceRepeated(z => new { z.Name, z.Surname }) .ToList() .ForEach(z => Console.WriteLine("{0} -> {1} {2}", z.Id, z.Name, z.Surname)); /* OUTPUT: Only Repeated more than once 3 -> Ricardo Figueiredo 5 -> Ricardo Figueiredo */ }