Wäre es nicht einfacher, die Liste einfach mit .Sort() aufsteigend zu
sortieren und dann einfach das zweite Element aus der sortierten Liste
zu ziehen?
(und bei Bedarf ggf. noch Duplikate vor dem Sortieren entfernen)
bluppdidupp schrieb:> Wäre es nicht einfacher, die Liste einfach mit .Sort() aufsteigend> zu> sortieren und dann einfach das zweite Element aus der sortierten Liste> zu ziehen?> (und bei Bedarf ggf. noch Duplikate vor dem Sortieren entfernen)
Sicher eine Möglichkeit, aber wie lösche ich denn ohne weiteres alle
Duplikate aus einer Liste?
List.RemoveDuplicateEntrys() gibt es jedenfalls nicht, also müsste ich
mir die Logik wohl selber schreiben?
Und dann ist es auch wieder nur ein anderer Lösungsansatz, der ähnlich
viel Aufwand benötigt.
bluppdidupp schrieb:> Also z.B. so irgendwie:// Input:> List<DateTime> inputDates=new List<DateTime>();> inputDates.Add(new DateTime(2015,10,14));> inputDates.Add(new DateTime(2015,10,14));> inputDates.Add(new DateTime(2015,10,14));> inputDates.Add(new DateTime(2022,5,1));>> // Doppelte Werte entfernen:> List<DateTime> inputDatesDistinct=inputDates.Distinct().ToList();>> // Aufsteigend sortieren:> inputDatesDistinct.Sort();>> // Ausgeben:> if (inputDatesDistinct.Count>0)> {> Console.WriteLine("Liegt am längsten zurück:> "+inputDatesDistinct[0]);> }>> if (inputDatesDistinct.Count>1)> {> Console.WriteLine("Liegt am zweit-längsten zurück:> "+inputDatesDistinct[1]);> }
Deine Lösung hat ebenfalls das selbe Programm... ich verstehe nicht
warum...
Dann muss es ja an DateTime.Sort() liegen?!
csharper schrieb:> Ja, es lag an List.Sort()...>> inputDatesDistinct.Sort((a, b) => b.CompareTo(a));>> Damit funktioniert es.>> Danke für eure Bemühungen.
Sorry, hab mich zu früh gefreut... das macht gar keinen Sinn, daran
liegt es nicht. Ich hab die Liste nur in der anderen Reihenfolge
abgegriffen...
Ich weiß immer noch nicht, warum es nicht funktioniert. Hat noch jemand
einen Tipp?
csharper schrieb:> Sorry, hab mich zu früh gefreut... das macht gar keinen Sinn, daran> liegt es nicht. Ich hab die Liste nur in der anderen Reihenfolge> abgegriffen...
Und das ist auch richtig so! Wenn du nämlich aufsteigend sortierst und
den zweiten Wert ausliest, erhälst du den zweitkleinsten Wert.
Absteigend sortiert hingegen ist der zweite Wert auch der zweithöchste.
Ich schätze mal dein Problem entstand dadurch, dass du nur zwei
verschiedene Werte genutzt hast und so bei falscher Sortierung den
entsprechend falschen Wert erhalten hast.
csharper schrieb:> bluppdidupp schrieb:>> Wäre es nicht einfacher, die Liste einfach mit .Sort() aufsteigend>> zu>> sortieren und dann einfach das zweite Element aus der sortierten Liste>> zu ziehen?>> (und bei Bedarf ggf. noch Duplikate vor dem Sortieren entfernen)>> Sicher eine Möglichkeit, aber wie lösche ich denn ohne weiteres alle> Duplikate aus einer Liste?>> List.RemoveDuplicateEntrys() gibt es jedenfalls nicht, also müsste ich> mir die Logik wohl selber schreiben?>> Und dann ist es auch wieder nur ein anderer Lösungsansatz, der ähnlich> viel Aufwand benötigt.
1
List<DateTime> dtList = new List<DateTime>();
2
dtList.Add(DateTime.Now);
3
dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));
4
dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));
5
dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));
6
dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));
7
dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));
8
dtList.Add(DateTime.Now.AddYears(5));
9
dtList.Add(DateTime.Now.AddYears(5));
10
dtList.Add(DateTime.Now.AddYears(5));
11
dtList.Add(DateTime.Now.AddYears(10));
12
dtList.Add(DateTime.Now.AddYears(10));
13
dtList.Add(DateTime.Now.AddYears(6));
14
15
var sortedListOfDistinctDates = dtList.Distinct().OrderBy(date => date).ToList();
Fuzzi59 schrieb:> csharper schrieb:>> Sorry, hab mich zu früh gefreut... das macht gar keinen Sinn, daran>> liegt es nicht. Ich hab die Liste nur in der anderen Reihenfolge>> abgegriffen...>> Und das ist auch richtig so! Wenn du nämlich aufsteigend sortierst und> den zweiten Wert ausliest, erhälst du den zweitkleinsten Wert.> Absteigend sortiert hingegen ist der zweite Wert auch der zweithöchste.>> Ich schätze mal dein Problem entstand dadurch, dass du nur zwei> verschiedene Werte genutzt hast und so bei falscher Sortierung den> entsprechend falschen Wert erhalten hast.
Du hast Recht. :) Es funktioniert so, vielen Dank... ich war wohl so
verzweifelt, dass ich gar nichts mehr geblickt habe.
Ich verstehe trotzdem nicht, warum mein Anfangscode nicht funktioniert
hat...
Naja, manchmal soll mans einfach so hinnehmen.
Danke euch.
Arc N. schrieb:> csharper schrieb:>> bluppdidupp schrieb:>>> Wäre es nicht einfacher, die Liste einfach mit .Sort() aufsteigend>>> zu>>> sortieren und dann einfach das zweite Element aus der sortierten Liste>>> zu ziehen?>>> (und bei Bedarf ggf. noch Duplikate vor dem Sortieren entfernen)>>>> Sicher eine Möglichkeit, aber wie lösche ich denn ohne weiteres alle>> Duplikate aus einer Liste?>>>> List.RemoveDuplicateEntrys() gibt es jedenfalls nicht, also müsste ich>> mir die Logik wohl selber schreiben?>>>> Und dann ist es auch wieder nur ein anderer Lösungsansatz, der ähnlich>> viel Aufwand benötigt.> List<DateTime> dtList = new List<DateTime>();> dtList.Add(DateTime.Now);> dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));> dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));> dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));> dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));> dtList.Add(new DateTime(2015, 10, 14, 0, 0, 0));> dtList.Add(DateTime.Now.AddYears(5));> dtList.Add(DateTime.Now.AddYears(5));> dtList.Add(DateTime.Now.AddYears(5));> dtList.Add(DateTime.Now.AddYears(10));> dtList.Add(DateTime.Now.AddYears(10));> dtList.Add(DateTime.Now.AddYears(6));>> var sortedListOfDistinctDates => dtList.Distinct().OrderBy(date => date).ToList();
Auch dir danke!
Unter "zweitweit entfernteste" hätte ich eigentlich das Datum das am
zweit-weitesten in der Vergangenheit liegt verstanden, daher hatte ich
aufsteigend sortiert, dann liegt das kleinere Datum (=weiter in der
Vergangenheit) vorne ;D
csharper schrieb:> Sicher eine Möglichkeit, aber wie lösche ich denn ohne weiteres alle> Duplikate aus einer Liste?
Warum eigentlich? das 2. ist das 2. Und wenn das denselben Wert hat wie
das 1. oder das 3., woher weisst du dann überhaupt, welches du jetzt
löschen musst? Das ist nicht wirklich ein Problem der Software, sondern
des Konzepts - was sind denn überhaupt Duplikate? Doppelgänger, geklonte
Kunden oder was?
Georg