Sortierreihenfolge definieren

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Translating-IT.

    Sortierreihenfolge definieren

    Hallo,

    ist es möglich in WPF und/oder einem Webprojekt die alphabetische Sortierreihenfolge für Strings vorzugeben? Im Netz (mehrsprachige Suchen) bin ich bis jetzt noch nicht wirklich fündig geworden.

    Es geht vor allem um die Sonderzeichen (Umlaute, Akzente, usw.): Je nach Programm (Excel, Notepadd++, …) sehe ich immer wieder unterschiedliche Standardsortierungen. Dies möchte ich bei meinen Programmen/Projekten direkt überall gleich und so haben, wie ich es möchte, und nicht wie es von bestehenden Klassen vorgegeben ist.

    Bsp.: Einige sortieren zuerst die Großbuchstaben, dann die Kleinbuchstaben, statt diese zu mischen. Manchmal wird Ä ganz am Ende vor B einsortiert statt dazwischen. Ich möchte zum Beispiel so sortieren (wobei A, a, Ä, und ä gleichwertig sind, dann B und b als gleichwertig, usw. usf.=:
    (A,a,Ä,ä) dann (B,b) dann (C,c) … (U,u,Ü,ü)

    aber
    Äuglein
    Auto
    automatisch
    Brutto

    und nicht:

    aber
    Auto
    automatisch
    Äuglein
    Brutto

    oder :

    Auto
    aber
    automatisch
    Äuglein
    Brutto

    bzw.
    Auto
    Äuglein
    Brutto
    aber
    automatisch


    Hoffe, das ist jetzt verständlich genug. ;) Ansonsten einfach nachfragen.

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Der mir bekannte älteste Zeichensatz ASCII (7 bit wurden genutzt) (American Standard Code für Information Interchange IIRC) hat die Reihenfolge, die Du beschriebst.
    Das liegt schlicht daran, dass man die Zeichen ja irgendwie codieren muss, damit ein Programm weiß, ob es ein A (dezimal 65) oder ein a (dezimal 97) anzeigen soll.
    Die Windows Zeichensätze, meist ANSI genannt, ist aber nicht ein Zeichensatz sondern sind gleich viele Zeichensätze, bei uns wird als "Windows-1252" angegeben.
    Dann gibt es noch Zeichensätze, die versuchen alle bekannten Zeichen der Welt aufzunehmen.
    Somit gibt es ASCII, ANSI, UNICODE und UTF.
    Jetzt kommt noch das Problem hinzu, dass die meisten Dateien in denen Text erfasst wird, gar nicht beschrieben welchen Zeichsatz sie verwendet haben.
    Also müssen Programme "raten" (auswerten) welcher Zeichensatz wahrscheinlich zutrifft um die Zeichen selbst möglichst korrekt darzustellen. Notepad++ macht das ganz gut.

    Die Sortierreihenfolge ergibt sich also aus der Codierung, nicht aus dem Zeichen an sich.
    Ich habe mal einen kleinen Test gemacht, wie .NET (bzw. C#) standardmäßig Strings miteinander vergleicht:


    Btw. OrderBy ergibt dasselbe Ergebnis
    SIMDoku (Simple Dokumentenverwaltung)
    Mein Lernprojekt um die verschiedensten Facetten der .NET Entwicklung zu erkunden.
    GitHub

    VB Paradise Dark Theme
    Inoffizieller VB-Paradise Discord.
    docs.microsoft.com/de-de/dotne…tem.text.encoding.default?

    Ich bin echt geplättet.....
    Wenigstens konnte ich Deinen Code noch optimieren :)

    C#-Quellcode

    1. string alphabet = "abcdefghijklmnopqrstuvwxyzäöü1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß";
    2. List<string> lstTest = new List<string>();
    3. lstTest.AddRange(alphabet.Select(c => c.ToString()));
    4. lstTest.Sort();
    5. string sorted = string.Join(string.Empty, lstTest);
    6. Console.WriteLine(sorted);

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Dksksm“ ()

    Danke.

    D.h., wenn ich jetzt ein Tool für unterschiedliche Sprachen rausbringe, sollte entsprechend die Codierung für die jeweilige Sprache verwendet/vorgegeben werden.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Danke sehr
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.