Hallo,
stimmt, ich gebe gerne zu, dass sich der Ausdruck nich ganz von selbst erklärt, besonders nicht als Anfänger.
Habe auch etwas Zeit gebraucht, bis ich den Ausdruck zusammenhatte
Also, den Ausdruck habe ich nochmal für Anschauungszwecke auseinandergenommen:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| IEnumerable<IGrouping<double, double>> grouped = values.GroupBy(d => d); IOrderedEnumerable<IGrouping<double, double>> orderedDesc = grouped.OrderByDescending(c => c.Count()); double returnValue = orderedDesc.First().Key; |
Das Problem an Deiner Aufgabe ist ja, dass Du Dir irgendwo "merken" musst, wie oft welcher Wert in dem Array ist. Natürlich könnte man das Ganze auch unter Verwendung einens Dictionarys machen, aber das ist als Anfänger (bzw. ich weiß nicht, wieweit Dein Wissen ist) vielleicht auch nicht gerade besser.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Dictionary<double, int> groupedValues = new Dictionary<double, int>(); foreach (double value in values) { if (groupedValues.ContainsKey(value)) groupedValues[value]++; else groupedValues.Add(value, 1); } |
So, nun hättest Du also alle Werte und die Anzahl, wie oft sie gezählt wurden, im Dictionary. Um nun den meistgezähltesten und den größten zu bekommen, könnte die Auswertung entweder so:
C#-Quelltext
1: 2:
| double returnValue = groupedValues.Where((x, y) => x.Value == groupedValues.Max(v => v.Value)) .Max(kv => kv.Key); |
oder auch nicht so kompliziert aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| KeyValuePair<double, int> mostcommon = new KeyValuePair<double,int>(); foreach (KeyValuePair<double, int> value in groupedValues) { if (value.Value > mostcommon.Value) { mostcommon = value; } else if (value.Value == mostcommon.Value && value.Key > mostcommon.Key) { mostcommon = value; } } double returnValue = mostcommon.Key; |
LG, MArko