2017-07-05 24 views
1

Also, sagen wir, ich habe eine Liste von Autos. Jeder Artikel in der Liste hat eine Marke und eine Farbeigenschaft. Ich möchte für jede Marke herausfinden, wie viele davon dieselbe Farbe haben, und dann diese Informationen ausdrucken. Die Liste wird durch Benutzereingaben gefüllt. Es gibt keine Möglichkeit für mich zu sagen, welche genauen Werte in der Liste stehen.Suchen Sie mehrere doppelte Werte in einer Liste in C#

Beispiel:

class Car 
    { 
     public string brand; 
     public string color; 
    } 

    private void DoSomething() 
    { 
     List<Car> cars = new List<Car>(); 
     cars.Add(new Car { brand = "Toyota", color = "blue" }); 
     cars.Add(new Car { brand = "Toyota", color = "red" }); 
     cars.Add(new Car { brand = "Toyota", color = "blue" }); 
     cars.Add(new Car { brand = "Audi", color = "red" }); 
     cars.Add(new Car { brand = "Audi", color = "red" }); 
     cars.Add(new Car { brand = "Audi", color = "blue" }); 

     // Find out for each brand how many there are of the same color, and then print that info 
     // Example output: Toyota: 2 blue, 1 red 
     //     Audi: 2 red, 1 blue 
    } 

verbringe ich habe eine lange Suche nach einem Weg, dies zu tun. Alles, was ich herausfinden konnte, war, wie ich die Anzahl der Vorkommen eines bestimmten Gegenstands in der Liste ermitteln konnte.

Wenn meine Frage unklar ist, lass es mich wissen, ich werde versuchen, ein bisschen mehr zu erklären.

+3

Sie können LINQ verwenden, um dies zu tun. Wenn Sie mit LINQ nicht vertraut sind, benötigen Sie ein wenig Nachforschungen, vielleicht ein paar Kopfschmerzen. Aber Sie werden mit ziemlich einfachem Code enden. –

+1

Zeigen Sie * was * Sie versucht haben, insbesondere diesen Code. – HimBromBeere

Antwort

4

Einige Linq sollten dies tun:

var result = cars.GroupBy(x => new { x.brand, x.color }) 
    .Select(x => new { 
     Brand = x.Key.brand, 
     Color = x.Key.color, 
     Count = x.Count() 
    }); 
+0

Danke, das hat für mich funktioniert. Alles, was ich danach tun musste, war, die Ergebnisse mit einer Schleife zu wiederholen. Ich werde definitiv etwas mehr über LINQ lernen müssen! – Joey040

3
var carGroups = cars.GroupBy(c => new { c.brand, c.color }); 
foreach (var carGroup in carGroups) 
{ 
    Console.WriteLine($"{carGroup.Key}, count: {carGroup.Count()}"); 
} 
+0

Vielen Dank für Ihre Antwort! Dies könnte für mich funktionieren, aber die akzeptierte Antwort gibt mir bessere Ergebnisse in meinem Fall. – Joey040

+0

Gern geschehen. Kein Problem, du solltest die Antwort akzeptieren, die am besten zu der Frage passt. Wenn es HimBromBeeres Antwort ist, dann verdient er den Ruf. – jAC

1
var grp = cars.GroupBy(g => new { g.brand, g.color }).Select(n => new { 
       brand = n.Key.brand, 
       color = n.Key.color, 
       count = n.Count() 

      }); 
Verwandte Themen