2012-03-28 16 views
5

में डुप्लिकेट आइटमों की गिनती पाएं I सूची में सी # का उपयोग कर रहा हूं।सी # सूची

TestCase.cs

public class TestCase 
{ 
    private string scenarioID; 
    private string error; 

    public string ScenarioID 
    { 
     get 
     { 
      return this.scenarioID; 
     } 
     set 
     { 
      this.scenarioID = value; 
     } 
    } 

    public string Error 
    { 
     get 
     { 
      return this.error; 
     } 
     set 
     { 
      this.error = value; 
     } 
    } 

    public TestCase(string arg_scenarioName, string arg_error) 
    { 
     this.ScenarioID = arg_scenarioName; 
     this.Error = arg_error; 
    } 
} 

सूची मैं createing रहा है:

private List<TestCase> GetTestCases() 
    { 
     List<TestCase> scenarios = new List<TestCase>(); 
     TestCase scenario1 = new TestCase("Scenario1", string.Empty); 
     TestCase scenario2 = new TestCase("Scenario2", string.Empty); 
     TestCase scenario3 = new TestCase("Scenario1", string.Empty); 
     TestCase scenario4 = new TestCase("Scenario4", string.Empty); 
     TestCase scenario5 = new TestCase("Scenario1", string.Empty); 
     TestCase scenario6 = new TestCase("Scenario6", string.Empty); 
     TestCase scenario7 = new TestCase("Scenario7", string.Empty); 

     scenarios.Add(scenario1); 
     scenarios.Add(scenario2); 
     scenarios.Add(scenario3); 
     scenarios.Add(scenario4); 
     scenarios.Add(scenario5); 
     scenarios.Add(scenario6); 
     scenarios.Add(scenario7); 

     return scenarios; 
    } 

अब मैं सूची के माध्यम से पुनरावृत्ति कर रहा हूँ कोड नीचे वर्णित के रूप में है। मैं यह देखना चाहता हूं कि एक ही परिदृश्य आईडी के साथ सूची में कितने डुप्लिकेट टेस्टकेस हैं। क्या लिंक्स या सूची के लिए किसी भी अंतर्निहित विधि का उपयोग करके इसे हल करने का कोई तरीका है?

सादर, प्रियंक

+3

आपके उदाहरण में क्या जवाब है? 1, 2, या 3 (या अन्य)? –

+1

http://stackoverflow.com/questions/5080538/c-sharp-determine-duplicate-in-list – assylias

+0

आपको डुप्लिकेट आइटमों की गणना करने की आवश्यकता क्यों है? (उत्सुक) –

उत्तर

18

इस प्रयास करें:

var numberOfTestcasesWithDuplicates = 
    scenarios.GroupBy(x => x.ScenarioID).Count(x => x.Count() > 1); 
+0

धन्यवाद एक टन डैनियल :) :) –

8

पहली बार एक विचार के रूप में:

int dupes = list.Count() - list.Distinct(aTestCaseComparer).Count(); 
+0

क्या होगा यदि एक ही परिदृश्य के साथ आईडी लेकिन अलग-अलग त्रुटियां? – daryal

+0

@daryal - बराबर (डुप्ली) की एक बेहतर परिभाषा की आवश्यकता होगी। जैसा कि मैंने कहने की कोशिश की, यह एक मोटा स्केच है जो गिनती के मुद्दे को हल करता है। –

+1

यह बॉक्स से बाहर काम नहीं करेगा - आपने कस्टम इक्विटी तुलनाकर्ता को लागू करने की आवश्यकता को छोड़ दिया है या ओपी के वर्ग – BrokenGlass

4
var groups = scenarios.GroupBy(test => test.ScenarioID) 
    .Where(group => group.Skip(1).Any()); 

है कि आप प्रत्येक ScenarioID कि से भी अधिक है के लिए एक समूह दे देंगे एक आइटम समूहों की गिनती डुप्लिकेट समूहों की संख्या है, और आंतरिक रूप से प्रत्येक समूह की गणना उस एकल आइटम के डुप्लिकेट की संख्या है। क्योंकि Where खंड में एक .Count() सिर्फ पता लगाने के लिए है कि वहाँ एक से अधिक हर एक आइटम पुनरावृति करने की आवश्यकता होगी

अतिरिक्त ध्यान दें, .Skip(1).Any() है।

var set = new HashSet<string>(); 
var result = scenarios.Count(x => !set.Add(x.ScenarioID)); 

पाने के लिए:

+0

'छोड़ें (1) .एनी() एक बेहतर दृष्टिकोण हो सकता है यदि आप उस मार्ग पर जाना चाहते हैं – BrokenGlass

+0

@ ब्रोकनग्लस हाँ, दोनों ओ (एन) के बजाय निरंतर समय हैं, लेकिन आपका वास्तव में बेहतर है; संपादित। – Servy

4

सिर्फ डुप्लिकेट गिनती पाने के लिए:

int duplicateCount = scenarios.GroupBy(x => x.ScenarioID) 
           .Sum(g => g.Count()-1); 
2

कुछ इस तरह हो सकता है

var result= GetTestCases() 
      .GroupBy (x =>x.ScenarioID) 
      .Select (x =>new{x.Key,nbrof=x.Count()}); 
1

डुप्लिकेट की कुल संख्या, अभी तक एक और प्राप्त करने के लिए अलग डुप्लिकेट:

var result = scenarios.GroupBy(x => x.ScenarioID).Count(x => x.Skip(1).Any()); 
संबंधित मुद्दे