Rumah > pembangunan bahagian belakang > C++ > Bagaimana Menghurufkan Rentetan dengan Nombor Terbenam Sambil Mengekalkan Susunan Berangka?

Bagaimana Menghurufkan Rentetan dengan Nombor Terbenam Sambil Mengekalkan Susunan Berangka?

Barbara Streisand
Lepaskan: 2024-12-30 10:16:14
asal
640 orang telah melayarinya

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

Cara Mengisih Rentetan Mengikut Abjad Semasa Mengekalkan Nilai Angka

Mengisih rentetan mengikut abjad boleh menghadapi cabaran apabila beberapa rentetan mengandungi aksara angka. Jika penukaran angka dilarang, pendekatan alternatif diperlukan untuk mengendalikan kes ini dengan berkesan.

Satu penyelesaian ialah menggunakan pembanding tersuai yang membezakan antara nilai angka dan bukan angka. Pembanding ini boleh dihantar kepada kaedah OrderBy untuk menyesuaikan kriteria pengisihan.

Berikut ialah contoh pelaksanaan menggunakan kaedah Enumerable.OrderBy dan kelas SemiNumericComparer:

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);
        }
    }
}
Salin selepas log masuk

Kod ini akan mengeluarkan rentetan dalam susunan diisih berikut:

007
90
bob
lauren
paul
101
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Menghurufkan Rentetan dengan Nombor Terbenam Sambil Mengekalkan Susunan Berangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan