Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah IComparer Tersuai Boleh Meningkatkan Linq OrderBy untuk Isih Rentetan Bukan Standard?

Bagaimanakah IComparer Tersuai Boleh Meningkatkan Linq OrderBy untuk Isih Rentetan Bukan Standard?

DDD
DDDasal
2025-01-01 08:37:13194semak imbas

How Can a Custom IComparer Enhance Linq OrderBy for Non-Standard String Sorting?

Menggunakan IComparer Tersuai dengan Linq OrderBy

Dalam Linq, kaedah OrderBy lalai menggunakan susunan semula jadi unsur. Walau bagaimanapun, apabila berurusan dengan jenis data yang kompleks seperti rentetan dengan pemformatan tertentu, IComparer tersuai mungkin diperlukan untuk mencapai gelagat pengisihan yang diingini.

Satu senario sedemikian melibatkan pengisihan senarai nombor invois dalam format "yyyyMMdd/nn". Susunan lalai akan menghasilkan hasil yang salah kerana kehadiran kedua-dua aksara angka dan abjad angka.

Pembanding tersuai, MyComparer, dicipta untuk menghuraikan nombor invois ke bahagiannya dan mengisih berdasarkannya. Walau bagaimanapun, pelaksanaan awal MyComparer hanya membandingkan komponen individu nombor invois sebagai rentetan. Ini menyebabkan nombor invois diisih secara leksikografi dan bukannya berangka.

Versi MyComparer yang diperbetulkan menukarkan komponen nombor invois kepada integer sebelum membandingkannya, memastikan pengisihan dilakukan dalam susunan berangka yang dijangkakan. Ini dicapai dengan menggunakan int.Parse() untuk menukar rentetan kepada integer.

Selain itu, untuk mencerminkan perubahan yang dibuat dalam kaedah ApplySortCore, senarai item mesti ditugaskan kembali kepada sifat Item pada BindingList< T>:

this.Items = items;

Dengan pengubahsuaian ini, MyComparer mengisih dengan betul nombor invois dalam susunan yang dikehendaki, memastikan senarai yang mengikat dikemas kini dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimanakah IComparer Tersuai Boleh Meningkatkan Linq OrderBy untuk Isih Rentetan Bukan Standard?. 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