Masalah:
Diberikan tatasusunan rentetan di mana setiap elemen menyimpulkan dengan nilai berangka, matlamatnya adalah untuk mengisih tatasusunan mengikut abjad angka, mengutamakan susunan berangka dalam setiap elemen.
Contoh:
Pertimbangkan tatasusunan rentetan:
partNumbers = ["ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11"]
Menggunakan kaedah OrderBy LINQ, hasil pengisihan yang diingini ialah:
["AB1", "AB2", "AB11", ... ]
Isu:
Walau bagaimanapun, mekanisme pengisihan lalai menganggap nombor sebagai rentetan, menghasilkan output berikut:
["AB1", "Ab11", "AB2", "ABC1", "ABC10", "ABC10", "ABC11", "ABC2"]
Penyelesaian:
Untuk membetulkan isu ini, ia diperlukan untuk melapik bahagian berangka rentetan dalam klausa pesanan. Dengan cara ini, OrderBy menganggap nombor sedemikian, bukan sebagai rentetan. Coretan kod berikut menunjukkan pendekatan ini:
var result = partNumbers.OrderBy(x => PadNumbers(x));
Kaedah PadNumbers:
Kaedah PadNumbers dilaksanakan seperti berikut:
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
Penjelasan:
Kaedah ini mengenal pasti dan pad semua jujukan berangka dalam rentetan input dengan sifar, dengan anggapan panjang digit maksimum 10. Pelapik ini memastikan bahawa nilai berangka dianggap sebagai nombor semasa proses pesanan, manakala data rentetan asal dikekalkan.
Output:
Menggunakan kaedah PadNumbers, tatasusunan diisih dengan betul sebagai:
["AB1", "AB2", "AB11", ... ]
Dengan menggunakan teknik pelapik ini, anda boleh mencapai pengisihan alfanumerik yang tepat dengan LINQ, di mana nilai berangka diutamakan dalam setiap elemen.
Atas ialah kandungan terperinci Bagaimanakah Kaedah OrderBy LINQ Boleh Digunakan untuk Pengisihan Alphanumeric Rentetan Yang Mengandungi Nombor Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!