Heim > Backend-Entwicklung > C++ > Wie sortiere ich Zeichenfolgen numerisch und behalte dabei die alphabetische Reihenfolge bei?

Wie sortiere ich Zeichenfolgen numerisch und behalte dabei die alphabetische Reihenfolge bei?

Barbara Streisand
Freigeben: 2024-12-31 02:19:14
Original
245 Leute haben es durchsucht

How to Sort Strings Numerically While Maintaining Alphabetical Order?

Zeichenfolgen numerisch sortieren und dabei die alphabetische Reihenfolge beibehalten

Um das Problem der Sortierung von Zeichenfolgen zu lösen, die numerisch sind, aber nicht in ganze Zahlen konvertiert werden können, können Sie Folgendes tun Implementieren Sie einen benutzerdefinierten Sortieralgorithmus. So geht's:

  1. Verwenden Sie die Methode Enumerable.OrderBy, mit der Sie einen benutzerdefinierten Vergleicher zum Sortieren angeben können.
  2. Erstellen Sie eine Klasse, die implementiert die IComparer-Schnittstelle und definiert die Logik für den Vergleich Zeichenfolgen.
  3. Implementieren Sie die Methode Compare innerhalb der benutzerdefinierten Vergleichsklasse, um die Reihenfolge von Zeichenfolgen zu bestimmen.
  4. Hier ist eine Beispielimplementierung der Klasse SemiNumericComparer das sowohl numerische als auch alphabetische berücksichtigt Werte:
public class SemiNumericComparer : IComparer<string>
{
    public static bool IsNumeric(string value) => int.TryParse(value, out _);

    public int Compare(string s1, string s2)
    {
        const int S1GreaterThanS2 = 1;
        const int S2GreaterThanS1 = -1;

        var isNumeric1 = IsNumeric(s1);
        var isNumeric2 = IsNumeric(s2);

        // Handle numeric comparisons
        if (isNumeric1 && isNumeric2)
        {
            var i1 = Convert.ToInt32(s1);
            var i2 = Convert.ToInt32(s2);

            return i1 > i2 ? S1GreaterThanS2 : (i1 < i2 ? S2GreaterThanS1 : 0);
        }

        // Handle mixed numeric and non-numeric comparisons
        if (isNumeric1) return S2GreaterThanS1;
        if (isNumeric2) return S1GreaterThanS2;

        // Handle alphabetical comparisons
        return string.Compare(s1, s2, true, CultureInfo.InvariantCulture);
    }
}
Nach dem Login kopieren
  1. Integrieren Sie den benutzerdefinierten Vergleicher in Ihre Sortierlogik:
string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" };

foreach (var thing in things.OrderBy(x => x, new SemiNumericComparer()))
{
    Console.WriteLine(thing);
}
Nach dem Login kopieren

Mit diesem Ansatz können Sie Zeichenfolgen alphabetisch sortieren und dabei numerische Werte berücksichtigen Werte, was zur gewünschten Ausgabe führt:

007
90
bob
lauren
paul
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie sortiere ich Zeichenfolgen numerisch und behalte dabei die alphabetische Reihenfolge bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage