दिलचस्प पोस्ट
फ्लफ़ वैल्यू के बाद क्यों च रखा जाता है? ईएफ 6 ट्यूटोरियल एसाईक्रोनस कॉल का उपयोग क्यों करता है? Http://java.sun.com/jsf/facelets के लिए टैग लाइब्रेरी डिस्क्रिप्टर नहीं मिल सकता है सी ++ 14 में क्यों 1 << 31 को कार्यान्वयन-परिभाषित किया गया था? कैसे एक AlertDialog में एक छवि डाल करने के लिए? एंड्रॉयड सार्वजनिक कुंजी उत्पन्न करने के लिए आरएसए निजी कुंजी का उपयोग करें? javax.servlet.ServletException: javax.servlet.jsp.JspTagException: <forEach> में आपूर्ति की गई वस्तुओं पर पुनरावृत्त करने का तरीका पता नहीं है> कैसे सीएसएस के साथ obliquely के माध्यम से हड़ताल करने के लिए प्रोटोटाइप पर सेटर / गेटर को कैसे परिभाषित करें डीएलएल को मॉनिटरिंग एप्लिकेशन कॉल एंड्रॉइड सपोर्ट लाइब्रेरी कैसे काम करती है दो mysqli क्वेरी मैक बनाम विंडोज पर अजगर में \ n \ n \ n \ n \ n \ n नई लाइनों को संभालना ऑब्जेक्ट के लिए LINQ के साथ पेजिंग उलट दिशा में सीएसएस एनीमेशन का पुनः उपयोग करें (राज्य को रीसेट करके?)

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

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

Solutions Collecting From Web of "सी # 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 */ }