Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengisih Rentetan Abjad Angka dengan Imbuhan Berangka Dengan Betul Menggunakan LINQ?

Bagaimanakah Saya Boleh Mengisih Rentetan Abjad Angka dengan Imbuhan Berangka Dengan Betul Menggunakan LINQ?

Barbara Streisand
Lepaskan: 2025-01-03 03:47:42
asal
738 orang telah melayarinya

How Can I Sort Alphanumeric Strings with Numeric Suffixes Correctly Using LINQ?

Isih abjad angka dengan LINQ

Mengisih rentetan abjad angka, di mana setiap elemen berakhir dengan nilai berangka, boleh mencabar dengan mekanisme pengisihan lalai LINQ. Masalah timbul apabila bergantung semata-mata pada susunan abjad, mengakibatkan output pengisihan yang tidak dijangka.

Pertimbangkan tatasusunan rentetan berikut:

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

Menggunakan kaedah OrderBy LINQ secara langsung akan menghasilkan output disusun berikut:

AB1
Ab11
AB2
ABC1
ABC10
ABC10
ABC11
ABC2
Salin selepas log masuk

Hasil ini menyimpang daripada jangkaan yang diingini kerana nilai berangka pada penghujungnya tidak diambil kira dengan betul.

Penyelesaian

Untuk mencapai pengisihan yang dimaksudkan, bahagian berangka rentetan perlu dipadatkan dalam kunci pengisihan. Ini boleh dicapai dengan kaedah tersuai, seperti PadNumbers, yang ditakrifkan seperti berikut:

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

Kaedah ini menggantikan sebarang jujukan berangka dalam rentetan input dengan setara dengan empuknya. Dengan menggunakan kaedah ini dalam klausa OrderBy, bahagian berangka dinormalisasi dengan berkesan untuk perbandingan:

var result = partNumbers.OrderBy(x => PadNumbers(x));
Salin selepas log masuk

Pendekatan ini memastikan bahawa nilai berangka dilayan secara sama rata, tanpa mengira panjangnya, menghasilkan pengisihan abjad angka yang diingini:

AB1
AB2
AB11
...
Salin selepas log masuk

Walaupun penyelesaian ini mengandaikan bilangan digit maksimum untuk nombor, ia menyediakan kaedah yang mantap untuk pengisihan alfanumerik menggunakan LINQ.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengisih Rentetan Abjad Angka dengan Imbuhan Berangka Dengan Betul Menggunakan LINQ?. 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