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
Lepaskan: 2024-12-29 06:59:15
asal
899 orang telah melayarinya

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

Hasil yang dijangkakan akan menyusun rentetan seperti berikut:

AB1
AB2
AB11
...
Salin selepas log masuk
Salin selepas log masuk

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

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

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

AB1
AB2
AB11
...
Salin selepas log masuk
Salin selepas log masuk

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!

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