Laden...

Liste nach String durchsuchen und zeile ausgeben

Erstellt von Maffi1986 vor 7 Jahren Letzter Beitrag vor 7 Jahren 6.450 Views
Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 7 Jahren
Liste nach String durchsuchen und zeile ausgeben

Hallo,

ich hab jetzt schon gesucht, bei google hab ich einige tutorials gefunden wie man in Listen sucht, allerdings nur nach int. Ich habe folgendes szenario


Sting Kundennumer = "KD4558";
List<KundeObj> Kundenliste = new List<KundeObj>();
...
       public class KundeObj
        {
            public string Name { get; set; }
            public string Vorname { get; set; }
            public string Straße { get; set; }
            public string Ort { get; set; }
            public string Kennzeichen { get; set; }
            public string KDNR { get; set; }
        }

Ich möchte jetzt nach der Kundennummer KD4558 suchen, und mir vor und nachnamen ausgeben lassen.


int idx = Kundenliste.IndexOf("KD4558");

das funktioniert nicht, weil meine Kundenummer kein int ist.

Vielen Dank

T
2.219 Beiträge seit 2008
vor 7 Jahren

Dafür brauchst du die Find Methode von List<T>


KundeObj kunde = Kundenliste.Find(k => k.KDNR == "KD4558");

Dann musst du nur prüfen ob dein Kunde vorhanden ist, also != null prüfen.
Aber für solche Suchen wäre dann ein Dictionary ein bessere Ansatz, wenn es keine doppelten Kundennummern gibt 😃

Ab einer gewissen Grösse der Liste ist Find dann eher langsam.

Mit einem Dictionary kannst du dies dann so umsetzen:


Dictionary<string, KundenObj> kunden = new Dictionary<string, KundenObj>();

// Dictionary mit den Kunden aus der Liste befüllen!
foreach(KundenObj kunde in kundenliste)
    kunden.Add(kunde.KDNR, kunde);

KundenObj gesuchterKunde = null;

// Kunden aus Dictionary suchen:
if (kunden.TryGetValue("KD4558", out gesuchterKunde))
{
    Console.WriteLine("Kunde gefunden: {0} {1}", gesuchterKunde.Vorname, gesuchterKunde.Name);
}


T-virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 7 Jahren

Hey T-Virus,

hat super funktioniert, das wird mein Programm um einiges Performanter machen, vielen Dank!!

Viele Grüße

Maffi

B
88 Beiträge seit 2016
vor 7 Jahren

Da ich es selber gerade lese:

[Artikel] C#: Richtlinien für die Namensvergabe

"KundeObj" (Suffix) und "K"groß)undenliste ist glaube ich eher unschön.

T
2.219 Beiträge seit 2008
vor 7 Jahren

@Maffi
Kein Problem 😃

@Buchstabensuppe
Schon recht aber für dieses Beispiel ist es erst einmal nicht so schlimm.
Schlimmer wäre es, wenn der gesamte Code so aussehen würde 😃
Wir selbst nutzen bei uns im Büro ähnliche Richtlinien!

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

B
88 Beiträge seit 2016
vor 7 Jahren

Sicher, da hast du Recht.
Ich dachte mir halt nur wäret den Anfängen.
Irgendwann sieht der Code sonst nämlich "so aus" wenn ihm das keiner sagt.

Aber im Nachhinein denke ich mir (auch wenn ich mir das Registrierdatum von Maffi so angucke) dass er das schon längst wusste und es war halt nur schnell im Forumeditor dahingetippt.

edit: Das Problem war übrigens gelöst.

C
2.121 Beiträge seit 2010
vor 7 Jahren

das funktioniert nicht, weil meine Kundenummer kein int ist.

Nein das funktioniert deswegen nicht weil dein IndexOf in der Liste nach einem String "KD4558" sucht. In der Liste sind aber keine Strings sondern Objekte vom Typ KundeObj.

T
2.219 Beiträge seit 2008
vor 7 Jahren

@chilic
Etwas spät für die Antwort.
Stimmt zwar, aber mit Find in meinem Besipiel hat er die Lösung um das Objekt zu suchen.
Falls man den Index dann immer noch braucht, muss er das Objekt ja nur an IndexOf geben.

@Buchstabensuppe
Stimmt soweit auch.
Aber wie man auch bei mir sehen kann, sagt das Registrierdatum nicht immer viel aus.
Ich habe ich 2008, damals noch in meiner Ausbildungszeit, hier angemeldet und er in den letzten 2-3 Jahren erst aktiver Fragen gestellt bzw. geholfen Antworten auf komplexere Fragen zu liefern 😃

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

B
88 Beiträge seit 2016
vor 7 Jahren

Trotzdem war das doch ein sinnvoller Beitrag von chilic, wenn auch vielleicht ein paar Stunden später.
Ich hatte auch das Gefühl dass hier ein falsches Verständnis von IndexOf vorliegt.

War auf jeden Fall sinnvoller als auf Namenskonventionen rumzureiten wie von meiner Wenigkeiteit, aber wie gesagt ich hatte das halt selber grad ausnahmsweise mal gelesen ^^

Wie auch immer ich denke es ist jetzt alles geklärt und schlage wir gehen davon aus, dass alles i.O ist bis der TE uns was anderes sagt 😉