Saya ingin mengurutkan daftar saya dengan date
properti.
Ini adalah kelas khusus saya:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Test.Web
{
public class cTag
{
public int id { get; set; }
public int regnumber { get; set; }
public string date { get; set; }
}
}
Dan ini List
yang saya ingin urutkan:
List<cTag> Week = new List<cTag>();
Yang ingin saya lakukan adalah mengurutkan Daftar menurut date
properti kelas cTag. Tanggal ist dalam format: dd.MM.yyyy.
Saya membaca sesuatu tentang IComparable
antarmuka, tetapi tidak tahu cara menggunakannya.
list.Sort((a,b) => a.date.CompareTo(b.date));
CompareTo
diimplementasikan.IComparable
penerima hibah bahwa suatu kelas akan memiliki metode tersebut, tetapi bagaimana cara membandingkannya, terserah pembuat kelas. Tidak yakin bagaimana Tanggal mengimplementasikan ICompare, tetapi sering kali saya telah melihat pengembang menggunakan parameter urutan diteruskan untuk memutuskan hubungan ketika nilainya sama. hthAnda benar bahwa kelas cTag Anda harus mengimplementasikan
IComparable<T>
antarmuka. Kemudian Anda bisa memanggilSort()
di daftar Anda.Untuk mengimplementasikan
IComparable<T>
antarmuka, Anda harus mengimplementasikanCompareTo(T other)
metode. Cara termudah untuk melakukannya adalah dengan memanggil metode CompareTo dari bidang yang ingin Anda bandingkan, yang dalam kasus Anda adalah tanggal.Namun, ini tidak akan diurutkan dengan baik, karena ini akan menggunakan pengurutan klasik pada string (karena Anda menyatakan tanggal sebagai string). Jadi menurut saya hal terbaik untuk dilakukan adalah dengan mendefinisikan ulang kelas dan menyatakan tanggal bukan sebagai string, tetapi sebagai DateTime. Kode tersebut akan tetap hampir sama:
Hanya hal yang harus Anda lakukan saat membuat instance kelas untuk mengubah string Anda yang berisi tanggal menjadi tipe DateTime, tetapi hal itu dapat dilakukan dengan mudah misalnya dengan
DateTime.Parse(String)
metode.sumber
Untuk kasus ini, Anda juga dapat mengurutkan menggunakan LINQ:
sumber
sumber
Hal pertama yang pertama, jika properti tanggal menyimpan tanggal, simpanlah menggunakan DateTime. Jika Anda mengurai tanggal melalui urutan yang harus Anda parse untuk setiap item yang dibandingkan, itu tidak terlalu efisien ...
Anda kemudian dapat membuat IComparer:
Anda bahkan dapat melakukannya sebagai delegasi:
sumber
Anda benar - Anda perlu menerapkan IComparable. Untuk melakukan ini, cukup nyatakan kelas Anda:
Di CompareTo, Anda cukup menerapkan algoritme perbandingan kustom Anda (Anda dapat menggunakan objek DateTime untuk melakukan ini, tetapi pastikan untuk memeriksa jenis "obj" terlebih dahulu). Untuk informasi lebih lanjut, lihat di sini dan di sini .
sumber
IComparable<T>
mungkin akan menjadi pilihan yang lebih baik, karena dicentang dalam preferensi untukIComparable
: msdn.microsoft.com/en-us/library/b0zbh7b6.aspxAnda bisa menggunakan linq:
sumber
lihat metode Sortir kelas List yang kelebihan beban. ada beberapa cara untuk itu. salah satunya: kelas kustom Anda harus mengimplementasikan antarmuka IComparable kemudian Anda dapat menggunakan metode Sortir kelas Daftar.
sumber
Terima kasih untuk semua Jawaban cepat.
Ini solusi saya:
Terima kasih
sumber
sumber