2015-12-11 5 views
7

मैं निम्नलिखित वर्ग की वस्तुओं की सूची है,करें सभी लेकिन एक एक सूची में डुप्लिकेट

class Invoice 
{ 
    public int InvoiceNumber; 
    public string CustomerName; 
    public bool IsDupe; 
} 

चालान नंबर डुप्लिकेट हो सकता है या वहाँ भी एक ही साथ सभी, 4 चालान का मामला हो सकता है नंबर।

मुझे चालान ऑब्जेक्ट को छोड़कर सभी पर IsDupe ध्वज सेट करने की आवश्यकता है। एक दृष्टिकोण चालान संख्याओं की सूची रखने और प्रत्येक को ध्वजांकित करने की तुलना करने के लिए बलपूर्वक बल विधि है। मैंने इस question को भी आजमाया है। क्या ऐसा करने के लिए कोई बेहतर वाक्य रचनात्मक तरीका है? टीआईए

उत्तर

4

यह मानते हुए कि आप (आप पहले ForEach निकाल सकते हैं) है कि हो सकता है इन तत्वों की एक सूची है, आप LINQ का उपयोग कर सकते हैं और ForEach एक्सटेंशन का उपयोग कर सकते हैं:

List<Invoice> invoices = /* */; 

invoices 
    .GroupBy(inv => inv.InvoiceNumber) 
    .ForEach(group => group.Skip(1).ForEach(notFirst => notFirst.IsDupe = true)); 

यह समूह InvoiceNumber द्वारा चालान करता है, और यदि किसी समूह में एक से अधिक आइटम होते हैं, तो यह पहले के अलावा सभी को छोड़कर IsDupe से true सेट करता है।

हालांकि, ForEach का उपयोग करके गैर-LINQ- अनुकूल और मेरे लिए कम पठनीय लगता है।
यह foreach साथ बहुत अच्छा लगता है:

foreach (var group in invoices.GroupBy(inv => inv.InvoiceNumber)) 
{ 
    foreach (var notFirstItem in group.Skip(1)) 
    { 
     notFirstItem.IsDupe = true; 
    } 
} 

अब, यह पूरी तरह से पठनीय है - हर समूह IsDupe = true के रूप में निशान ले, पहले एक को छोड़कर सभी आइटम ले, और।

5

यह काम करता है।

var invs = new List<Invoice> { new Invoice { InvoiceNumber = 1 }, 
           new Invoice { InvoiceNumber = 1 }, 
           new Invoice { InvoiceNumber = 1 }, 
           new Invoice { InvoiceNumber = 2 }, 
           new Invoice { InvoiceNumber = 3 }, 
           new Invoice { InvoiceNumber = 3 } 
          }; 

invs.ForEach(i => i.IsDupe = true); 
invs.GroupBy (i => i.InvoiceNumber) 
    .Select(g => g.First()) 
    .ToList() 
    .ForEach(i => i.IsDupe = false); 

उत्पादन

1 null False 
1 null True 
1 null True 
2 null False 
3 null False 
3 null True 

वैकल्पिक रूप से, आप संपत्ति IsNotDupe फोन और तथ्य यह है का लाभ लेने के गलत पर बूलियन चूक

संबंधित मुद्दे