दिलचस्प पोस्ट
कैसे बाश में साहचर्य सरणियों पर पुनरावृति करना 128-बिट पूर्णांक मॉड्यूलो को 64-बिट पूर्णांक की गणना करने का सबसे तेज़ तरीका निर्धारित करें कि अपलोड की गई फ़ाइल MVC पर छवि (कोई प्रारूप) है जावा के साथ सेलेनियम वेबड्रायवर का प्रयोग करके टैब स्विच करें समूह द्वारा लगातार पंक्तियों में मूल्यों के बीच अंतर की गणना करें एक सरणी को देखते हुए, प्रत्येक तत्व के लिए अगले छोटे तत्व को ढूंढें सीएसएस पेज – सभी ब्राउज़रों में काम नहीं करना जांचें कि स्ट्रिंग में एरे शब्द शामिल हैं या नहीं एंड्रॉइड आइड ऑरिएंटेशन अजीमुथ प्रदूषित हो जाता है जब फ़ोन झुका हुआ होता है कैसे जावा में अंतर मानों को जोड़ना है? आप कैसे एक swf फ़ाइल decompile एंड्रॉइड पर URL से यूआरएल से सरल पार्स और लिस्ट्यूव्यू में डिस्प्ले AngularJS: एनजी-शो / एनजी-छिपाना मैं iPhone पर प्रोग्राम को एक छवि कैसे दिखाऊंगा? यदि उपयोगकर्ता नाम पहले से ही अस्तित्व में है, तो जांचने के लिए jQuery के दूरस्थ विधि उपयोग मान्य करें

LINQ का उपयोग करके सूची में डुप्लिकेट निकालें

मेरे properties (Id, Name, Code, Price) साथ एक कक्षा Items I

Items की सूची डुप्लिकेट आइटम के साथ आबादी है।

पूर्व के लिए:

 1 Item1 IT00001 $100 2 Item2 IT00002 $200 3 Item3 IT00003 $150 1 Item1 IT00001 $100 3 Item3 IT00003 $150 

LINQ का उपयोग करके सूची में डुप्लिकेट को कैसे निकालना है?

वेब के समाधान से एकत्रित समाधान "LINQ का उपयोग करके सूची में डुप्लिकेट निकालें"

 var distinctItems = items.Distinct(); 

केवल कुछ गुणों पर मिलान करने के लिए, एक कस्टम समानता की तुलना बनाएं, जैसे:

 class DistinctItemComparer : IEqualityComparer<Item> { public bool Equals(Item x, Item y) { return x.Id == y.Id && x.Name == y.Name && x.Code == y.Code && x.Price == y.Price; } public int GetHashCode(Item obj) { return obj.Id.GetHashCode() ^ obj.Name.GetHashCode() ^ obj.Code.GetHashCode() ^ obj.Price.GetHashCode(); } } 

फिर इसे इस तरह प्रयोग करें:

 var distinctItems = items.Distinct(new DistinctItemComparer()); 
 var distinctItems = items.GroupBy(x => x.Id).Select(y => y.First()); 

अगर आपकी कुछ विशिष्ट क्वेरी फेंकने वाला कोई चीज़ है, तो आप MoreLinq को देख सकते हैं और डिस्ट्रिबेट ऑपरेटर का इस्तेमाल कर सकते हैं और आईडी से अलग ऑब्जेक्ट का चयन कर सकते हैं।

 var distinct = items.DistinctBy( i => i.Id ); 

इस तरह मैं Linq के साथ समूह में सक्षम था। आशा करता हूँ की ये काम करेगा।

 var query = collection.GroupBy(x => x.title).Select(y => y.FirstOrDefault()); 

Distinct() उपयोग करें लेकिन ध्यान रखें कि यह मूल्यों की तुलना करने के लिए डिफ़ॉल्ट समानता तुलना का उपयोग करता है, इसलिए यदि आप इससे कुछ भी चाहते हैं, तो आपको अपना खुद की तुलना करें

एक उदाहरण के लिए कृपया http://msdn.microsoft.com/en-us/library/bb348436.aspx देखें।

आपकी सूची में डुप्लिकेट आइटम को हटाने के लिए आपके पास तीन विकल्प हैं:

  1. एआर कस्टम समानता का प्रयोग करें और फिर Distinct(new DistinctItemComparer()) डिस्स्टिंकइटम कॉम्परेयर Distinct(new DistinctItemComparer()) जैसा कि @ क्रिस्टियन हाइटर ने उल्लेख किया है।
  2. GroupBy उपयोग करें, लेकिन समूह में कृपया ध्यान दें कि आपको सभी कॉलमों द्वारा समूह GroupBy चाहिए क्योंकि यदि आप केवल Id समूह में ही डुप्लिकेट आइटम हमेशा से नहीं निकालते हैं उदाहरण के लिए निम्नलिखित उदाहरण पर विचार करें:

     List<Item> a = new List<Item> { new Item {Id = 1, Name = "Item1", Code = "IT00001", Price = 100}, new Item {Id = 2, Name = "Item2", Code = "IT00002", Price = 200}, new Item {Id = 3, Name = "Item3", Code = "IT00003", Price = 150}, new Item {Id = 1, Name = "Item1", Code = "IT00001", Price = 100}, new Item {Id = 3, Name = "Item3", Code = "IT00003", Price = 150}, new Item {Id = 3, Name = "Item3", Code = "IT00004", Price = 250} }; var distinctItems = a.GroupBy(x => x.Id).Select(y => y.First()); 

    इस समूह के लिए परिणाम निम्न होगा:

     {Id = 1, Name = "Item1", Code = "IT00001", Price = 100} {Id = 2, Name = "Item2", Code = "IT00002", Price = 200} {Id = 3, Name = "Item3", Code = "IT00003", Price = 150} 

    जो गलत है क्योंकि यह डुप्लिकेट के रूप में {Id = 3, Name = "Item3", Code = "IT00004", Price = 250} । तो सही प्रश्न होगा:

     var distinctItems = a.GroupBy(c => new { c.Id , c.Name , c.Code , c.Price}) .Select(c => c.First()).ToList(); 

    3. आइटम क्लास में Equal और GetHashCode ओवरराइड करें:

     public class Item { public int Id { get; set; } public string Name { get; set; } public string Code { get; set; } public int Price { get; set; } public override bool Equals(object obj) { if (!(obj is Item)) return false; Item p = (Item)obj; return (p.Id == Id && p.Name == Name && p.Code == Code && p.Price == Price); } public override int GetHashCode() { return String.Format("{0}|{1}|{2}|{3}", Id, Name, Code, Price).GetHashCode(); } } 

    तो आप इसे इस तरह से उपयोग कर सकते हैं:

     var distinctItems = a.Distinct(); 
 List<Employee> employees = new List<Employee>() { new Employee{Id =1,Name="AAAAA"} , new Employee{Id =2,Name="BBBBB"} , new Employee{Id =3,Name="AAAAA"} , new Employee{Id =4,Name="CCCCC"} , new Employee{Id =5,Name="AAAAA"} }; List<Employee> duplicateEmployees = employees.Except(employees.GroupBy(i => i.Name) .Select(ss => ss.FirstOrDefault())) .ToList(); 

इस विस्तार विधि को बाहर की कोशिश करें उम्मीद है कि यह मदद कर सकता है

 public static class DistinctHelper { public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) { var identifiedKeys = new HashSet<TKey>(); return source.Where(element => identifiedKeys.Add(keySelector(element))); } } 

उपयोग:

 var outputList = sourceList.DistinctBy(x => x.TargetProperty); 

जब आप IEqualityComparer लिखना नहीं चाहते हैं, तो आप निम्न की तरह कुछ कोशिश कर सकते हैं।

  class Program { private static void Main(string[] args) { var items = new List<Item>(); items.Add(new Item {Id = 1, Name = "Item1"}); items.Add(new Item {Id = 2, Name = "Item2"}); items.Add(new Item {Id = 3, Name = "Item3"}); //Duplicate item items.Add(new Item {Id = 4, Name = "Item4"}); //Duplicate item items.Add(new Item {Id = 2, Name = "Item2"}); items.Add(new Item {Id = 3, Name = "Item3"}); var res = items.Select(i => new {i.Id, i.Name}) .Distinct().Select(x => new Item {Id = x.Id, Name = x.Name}).ToList(); // now res contains distinct records } } public class Item { public int Id { get; set; } public string Name { get; set; } }