(Personen)-Array alphabetisch sortieren

  • Allgemein

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    (Personen)-Array alphabetisch sortieren

    Hi, wahrscheinlich gibts des schon 1000 mal aber ich hab nix gefunden oder gecheckt:

    Wie kann ich ein Array (bzw. hab ich eine ObservableCollection), das Personen enthält, alphabetisch nach Namen sortieren?
    Eine Person ist eine Klasse mit einer Eigenschaft 'Name', nach der sortiert werden soll...

    iwie gehört sowas zu den Basics, oder? Aber ich hab echt nix verständliches und brauchbares gefunden...

    Rinecamo schrieb:

    ar = ar.OrderBy(Function(m) m.Name)
    'oder
    ar = From person in ar Order By person.Name Select person '(Stichwort Linq)

    Oh die Antwort hab ich gar nicht gesehen... sry und danke

    Ich kann aber jetzt keine Linq.IOrderedEnumerable -Liste nehmen, da ich zwecks Datenbinden (MVVM) ObservableCollection brauche... was nun?
    stimmt das würde gehn :D

    Aber sorry ich stell mich grad ziemlich dumm an... was genau muss jetzt das ar für ein typ sein, weil IOrderedEnumerable ist ja iwie nur ne Schnittstelle oder so (da kenn ich mich noch nicht so aus...).
    Am liebsten wärs mir natürlich, wenn mir jemand nen Code hinklatscht :D
    @ErfinderDesRades
    Stimmt, ich dachte die OC hätte so eine Methode...

    hingeklatschter Code:

    VB.NET-Quellcode

    1. For Each item As var In myListFromLINQ
    2. list.Add(item)
    3. Next

    myListFromLINQ ist dann das was du vom LINQ-Ausdruck zurück bekommst.
    jo hab ich auch gerade festgestell, aber ist ja nicht so schlimm... :D Aber ich hab etz nochmal Google bemüht und tatsächlich die Lösung gefunden :D zumindest eine, die ich auch versteh :D und zwar auf StackOverflow
    mein Code (bin grad in c# :D):

    Quellcode

    1. List<Person> geordneteListe = new List<Person>(alteListe);
    2. geordneteListe.Sort(new Comparison<Person>((x, y) => string.Compare(x.Name, y.Name)));
    3. alteListe.Clear();
    4. foreach (Person pers in geordneteListe)
    5. alteListe.Add(pers);
    Hallo,

    oder es funktioniert sogar vielleicht kürzer:

    VB.NET-Quellcode

    1. myListFromLINQ.ForEach(Sub(ByVal text As String) list.Add(text))


    /nicht getestet

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    So wie ich das verstanden habe möchtest du doch die komplette Liste sortieren. Dann würde es auch einfach reichen, eine neue sortierte Liste zu erstellen, anstatt der alten die neuen Items hinzuzufügen:

    VB.NET-Quellcode

    1. Dim sorted As New ObservableCollection(unsorted.OrderBy(Function(item) item.Name)

    Dabei kann unsorted von einem beliebigen Typ sein, der IEnumerable implementiert (also theoretisch auch eine ObservableCollection, ist aber unnötig, da du ja nur die sortierten Daten überwachen musst).