using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Program {
class Stahl {
public int Laenge { get; set; }
public int Nr { get; set; }
};
class StahlComparer : IComparer<Stahl> {
public int Compare(Stahl x, Stahl y) {
if (x.Nr > y.Nr) return 1;
else if (x.Nr < y.Nr) return -1;
return 0;
}
};
class Program {
static void Main(string[] args) {
var stalhs = new List<Stahl>() {
new Stahl{ Laenge = 36, Nr = 8 },
new Stahl{ Laenge = 36, Nr = 12 },
new Stahl{ Laenge = 36, Nr = 14 },
new Stahl{ Laenge = 30, Nr = 12 },
new Stahl{ Laenge = 30, Nr = 4 },
new Stahl{ Laenge = 36, Nr = 12 },
new Stahl{ Laenge = 30, Nr = 12 },
new Stahl{ Laenge = 30, Nr = 12 }
};
stalhs.Sort(new StahlComparer());
Console.WriteLine("Sorted List: ");
foreach (var stahl in stalhs) Console.WriteLine("{0}, {1}", stahl.Laenge, stahl.Nr);
var counts = stalhs.GroupBy(obj => new { obj.Laenge, obj.Nr }).ToDictionary(obj => obj.Key, obj => obj.Count());
Console.WriteLine("\nOccurences: ");
foreach (var count in counts) Console.WriteLine("{0}, {1}", count.Key, count.Value);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0Owp1c2luZyBTeXN0ZW0uSU87CgpuYW1lc3BhY2UgUHJvZ3JhbSB7CiAgICBjbGFzcyBTdGFobCAgewogICAgICAgIHB1YmxpYyBpbnQgTGFlbmdlIHsgZ2V0OyBzZXQ7IH0KICAgICAgICBwdWJsaWMgaW50IE5yIHsgZ2V0OyBzZXQ7IH0KICAgIH07CgogICAgY2xhc3MgU3RhaGxDb21wYXJlciA6IElDb21wYXJlcjxTdGFobD4gewoKICAgICAgICBwdWJsaWMgaW50IENvbXBhcmUoU3RhaGwgeCwgU3RhaGwgeSkgewogICAgICAgICAgICBpZiAoeC5OciA+IHkuTnIpIHJldHVybiAxOwogICAgICAgICAgICBlbHNlIGlmICh4Lk5yIDwgeS5OcikgcmV0dXJuIC0xOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9OwoKICAgIGNsYXNzIFByb2dyYW0gewogICAgICAgIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykgewogICAgICAgICAgICB2YXIgc3RhbGhzID0gbmV3IExpc3Q8U3RhaGw+KCkgewogICAgICAgICAgICAgICAgbmV3IFN0YWhseyBMYWVuZ2UgPSAzNiwgTnIgPSA4IH0sCiAgICAgICAgICAgICAgICBuZXcgU3RhaGx7IExhZW5nZSA9IDM2LCBOciA9IDEyIH0sCiAgICAgICAgICAgICAgICBuZXcgU3RhaGx7IExhZW5nZSA9IDM2LCBOciA9IDE0IH0sCiAgICAgICAgICAgICAgICBuZXcgU3RhaGx7IExhZW5nZSA9IDMwLCBOciA9IDEyIH0sCiAgICAgICAgICAgICAgICBuZXcgU3RhaGx7IExhZW5nZSA9IDMwLCBOciA9IDQgfSwKICAgICAgICAgICAgICAgIG5ldyBTdGFobHsgTGFlbmdlID0gMzYsIE5yID0gMTIgfSwKICAgICAgICAgICAgICAgIG5ldyBTdGFobHsgTGFlbmdlID0gMzAsIE5yID0gMTIgfSwKICAgICAgICAgICAgICAgIG5ldyBTdGFobHsgTGFlbmdlID0gMzAsIE5yID0gMTIgfQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgc3RhbGhzLlNvcnQobmV3IFN0YWhsQ29tcGFyZXIoKSk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJTb3J0ZWQgTGlzdDogIik7CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBzdGFobCBpbiBzdGFsaHMpIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0sIHsxfSIsIHN0YWhsLkxhZW5nZSwgc3RhaGwuTnIpOwoKICAgICAgICAgICAgdmFyIGNvdW50cyA9IHN0YWxocy5Hcm91cEJ5KG9iaiA9PiBuZXcgeyBvYmouTGFlbmdlLCBvYmouTnIgfSkuVG9EaWN0aW9uYXJ5KG9iaiA9PiBvYmouS2V5LCBvYmogPT4gb2JqLkNvdW50KCkpOwoKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlxuT2NjdXJlbmNlczogIik7CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBjb3VudCBpbiBjb3VudHMpIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0sIHsxfSIsIGNvdW50LktleSwgY291bnQuVmFsdWUpOwogICAgICAgIH0KICAgIH0KfQ==
Sorted List:
30, 4
36, 8
30, 12
36, 12
30, 12
36, 12
30, 12
36, 14
Occurences:
{ Laenge = 30, Nr = 4 }, 1
{ Laenge = 36, Nr = 8 }, 1
{ Laenge = 30, Nr = 12 }, 3
{ Laenge = 36, Nr = 12 }, 2
{ Laenge = 36, Nr = 14 }, 1