Heim > Backend-Entwicklung > C++ > Wie alphabetisiert man Zeichenfolgen mit eingebetteten Zahlen und behält dabei die numerische Reihenfolge bei?

Wie alphabetisiert man Zeichenfolgen mit eingebetteten Zahlen und behält dabei die numerische Reihenfolge bei?

Barbara Streisand
Freigeben: 2024-12-30 10:16:14
Original
622 Leute haben es durchsucht

How to Alphabetize Strings with Embedded Numbers While Preserving Numerical Order?

So sortieren Sie Zeichenfolgen alphabetisch und behalten dabei numerische Werte bei

Das alphabetische Sortieren von Zeichenfolgen kann zu Problemen führen, wenn einige der Zeichenfolgen numerische Zeichen enthalten. Wenn die numerische Konvertierung verboten ist, ist ein alternativer Ansatz erforderlich, um diese Fälle effektiv zu behandeln.

Eine Lösung besteht darin, einen benutzerdefinierten Vergleicher zu verwenden, der zwischen numerischen und nicht numerischen Werten unterscheidet. Dieser Vergleicher kann an die OrderBy-Methode übergeben werden, um die Sortierkriterien anzupassen.

Hier ist eine Beispielimplementierung mit der Enumerable.OrderBy-Methode und einer SemiNumericComparer-Klasse:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" };

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

    public class SemiNumericComparer: IComparer<string>
    {
        /// <summary>
        /// Determine if a string is a number
        /// </summary>
        /// <param name="value">String to test</param>
        /// <returns>True if numeric</returns>
        public static bool IsNumeric(string value)
        {
            return int.TryParse(value, out _);
        }

        /// <inheritdoc />
        public int Compare(string s1, string s2)
        {
            // Flags to indicate if strings are numeric
            var IsNumeric1 = IsNumeric(s1);
            var IsNumeric2 = IsNumeric(s2);

            // Handle numeric comparisons
            if (IsNumeric1 && IsNumeric2)
            {
                var i1 = Convert.ToInt32(s1);
                var i2 = Convert.ToInt32(s2);
                
                // Order by numerical value
                if (i1 > i2)
                {
                    return 1;
                }

                if (i1 < i2)
                {
                    return -1;
                }

                return 0;
            }

            // Handle cases where only one string is numeric
            if (IsNumeric1)
            {
                return -1;
            }

            if (IsNumeric2)
            {
                return 1;
            }

            // Default to alphabetical comparison
            return string.Compare(s1, s2, true, CultureInfo.InvariantCulture);
        }
    }
}
Nach dem Login kopieren

Dieser Code gibt die aus Zeichenfolgen in der folgenden sortierten Reihenfolge:

007
90
bob
lauren
paul
101
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie alphabetisiert man Zeichenfolgen mit eingebetteten Zahlen und behält dabei die numerische 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