Entwickler-Ecke

C# - Die Sprache - Max/Min in einer Liste


Vitalic - Mo 04.10.10 15:55
Titel: Max/Min in einer Liste
Hallo,


wie kann ich in einer Liste Max bzw. Min bestimmen?
Möchte ungern Schleifen benutzen und dann noch if-Abfragen machen!
Es muss doch eine Methode geben, die das macht?

List<int> myList= new List<int>() { 0, 2, 35, 6, 3, -2 };

...

Gruß, Vitalic


bakachan - Mo 04.10.10 16:02

Bin mir jetzt nicht ganz sicher ob das bei 3.5 scon vorhanden war oder erst bei 4.0 kam aber wie wärs mit:
1. Möglichkeit

C#-Quelltext
1:
int max = myList.Max();                    


2. Möglichkeit
Du lässt die Liste sortieren und nimmst dann den ersten und den letzten Wert.

3. Möglichkeit
Du durchläufst 1 mal deine Liste und sucht dir dabei einfach die min und max werte raus.
(das sind ja nur wenige Zeilen)


Vitalic - Mo 04.10.10 16:14

Danke bakachan,

das mit der ersten Möglichkeit habe ich auch davor versucht, hat aber auch nicht funktioniert, vielleicht erst ab 4.0

Habe das mal so gemacht:

int ll = myList.Max(ob => ob);


Gruß, Vitalic


Kha - Mo 04.10.10 17:56

user profile iconVitalic hat folgendes geschrieben Zum zitierten Posting springen:
das mit der ersten Möglichkeit habe ich auch davor versucht, hat aber auch nicht funktioniert
Sollte es aber, da es exakt äquivalent ist zu Max(x => x) :gruebel: .


Vitalic - Mo 04.10.10 18:15

@ Kha

Stimmt, es klappt doch :)...


Aber wie bekomme ich das Maximum, wenn ich eine Liste in Liste habe?

List<List<Werte>> maxWert = new List<List<Werte>>();

Die Klasse Werte besitzt eine Methode "getWert()"

geht das so?

double max = maxWert.Max(obj1 => (obj2 => obj2.getWert()));



Gruß, Vitalic


Kha - Mo 04.10.10 18:34

user profile iconVitalic hat folgendes geschrieben Zum zitierten Posting springen:
Die Klasse Werte besitzt eine Methode "getWert()"
Wir sind hier doch nicht bei Java :D .

user profile iconVitalic hat folgendes geschrieben Zum zitierten Posting springen:
geht das so?

double max = maxWert.Max(obj1 => (obj2 => obj2.getWert()));
Kann es sein, dass du mit Lambda-Ausdrücken noch nicht sonderlich viel anfangen kannst ;) ? Solange ich würde ich dann doch lieber weiter mit Schleifen arbeiten. Wie auch immer, mit einem zweiten Max würde es so funktionieren:

C#-Quelltext
1:
double max = maxWert.Max(list => list.Max(obj => obj.getWert()));                    


Vitalic - Mo 04.10.10 23:13

Danke Kha.

Ja ich habe früher nur mit Java programmiert und muss jetzt auf C# umsteigen.

Vielleicht kurze Frage außerhalb des Themas.

Darf man so Methoden setter und getter in C# schreiben?
Ich meine, es funktioniert ja :)

Und wozu hat man den Datentyp String in klein und groß?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        public double getWert()
        {
            return wert;
        }

        public void getWert(double wert)
        {
            this.wert = wert;
        }


Moderiert von user profile iconKha: C#-Tags hinzugefügt


Kha - Mo 04.10.10 23:41

user profile iconVitalic hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht kurze Frage außerhalb des Themas.
Eigentlich gilt "Ein Thread, eine Frage", aber wenn ich es schon losgetreten habe :) ...
Erlaubt ist natürlich alles, was funktioniert, aber in einer Sprache, die Properties kennt, wären solche Methoden gelinde gesagt Blödsinn ;) . Und string ist ein Alias für System.String wie es int für System.Int32 ist.