Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah LINQ Boleh Mencapai Pengisihan Alfanumerik yang Betul bagi Rentetan Yang Mengandungi Nombor?

Bagaimanakah LINQ Boleh Mencapai Pengisihan Alfanumerik yang Betul bagi Rentetan Yang Mengandungi Nombor?

Susan Sarandon
Susan Sarandonasal
2024-12-29 06:59:15926semak imbas

How Can LINQ Achieve Correct Alphanumeric Sorting of Strings Containing Numbers?

Isih Alfanumerik Menggunakan LINQ

Apabila berurusan dengan rentetan yang termasuk nilai angka, isihan abjad lalai dalam LINQ mungkin tidak menghasilkan hasil yang diingini. Pertimbangkan contoh berikut:

string[] partNumbers = new string[] 
{ 
    "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" 
};

var result = partNumbers.OrderBy(x => x);

Hasil yang dijangkakan akan menyusun rentetan seperti berikut:

AB1
AB2
AB11
...

Walau bagaimanapun, hasil sebenar berbeza kerana susunan rentetan lalai mengikut susunan leksikografi. Ini bermakna nilai berangka dibandingkan dari kiri ke kanan, membawa kepada susunan berikut:

AB1
Ab11
AB2
ABC1
ABC10
ABC10
ABC11
ABC2

Untuk mencapai pengisihan alfanumerik yang dikehendaki, kita perlu mengubah suai logik perbandingan. Kita boleh meletakkan bahagian berangka setiap rentetan dengan nombor sifar tertentu. Ini memastikan bahawa nilai berangka dibandingkan dengan adil, tanpa mengira panjangnya.

public static string PadNumbers(string input)
{
    return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0'));
}

var result = partNumbers.OrderBy(x => PadNumbers(x));

Dengan susunan yang diubah suai ini, bahagian berangka rentetan dibandingkan berdasarkan nilai empuknya, yang membawa kepada susunan yang betul berikut:

AB1
AB2
AB11
...

Perhatikan bahawa pendekatan ini mengandaikan bilangan digit maksimum untuk nombor dalam input. Jika terdapat nombor dengan lebih banyak digit daripada pelapik yang ditentukan, pengisihan mungkin tidak tepat.

Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Mencapai Pengisihan Alfanumerik yang Betul bagi Rentetan Yang Mengandungi Nombor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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