Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Liste nach String durchsuchen und zeile ausgeben
Maffi1986
myCSharp.de - Member

Avatar #avatar-3437.gif


Dabei seit:
Beiträge: 54
Herkunft: Soest

Themenstarter:

Liste nach String durchsuchen und zeile ausgeben

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1833
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers
Maffi1986
myCSharp.de - Member

Avatar #avatar-3437.gif


Dabei seit:
Beiträge: 54
Herkunft: Soest

Themenstarter:

beantworten | zitieren | melden

Hey T-Virus,

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

Viele Grüße

Maffi
private Nachricht | Beiträge des Benutzers
Buchstabensuppe
myCSharp.de - Member



Dabei seit:
Beiträge: 102

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1833
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
Buchstabensuppe
myCSharp.de - Member



Dabei seit:
Beiträge: 102

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Buchstabensuppe am .
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2125

beantworten | zitieren | melden

Zitat von Maffi1986
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.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1833
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
Buchstabensuppe
myCSharp.de - Member



Dabei seit:
Beiträge: 102

beantworten | zitieren | melden

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 ;)
private Nachricht | Beiträge des Benutzers