Я хотел бы отсортировать свой список с date
недвижимостью.
Это мой собственный класс:
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; }
}
}
Вот List
что я хочу отсортировать:
List<cTag> Week = new List<cTag>();
Я хочу отсортировать список по date
свойству класса cTag. Дата имеет формат: дд.ММ.гггг.
Я читал кое-что об IComparable
интерфейсе, но не знаю, как им пользоваться.
list.Sort((a,b) => a.date.CompareTo(b.date));
CompareTo
реализовано.IComparable
получателям разрешений, что у класса будет метод, но как он выполняет это сравнение, зависит от создателя класса. Не уверен, как Date реализует ICompare, но я часто видел, как разработчики использовали параметры порядка, которые были переданы, чтобы разорвать связь, когда значения равны. hthВы правы, что ваш класс cTag должен реализовывать
IComparable<T>
интерфейс. Тогда ты можешь просто позвонитьSort()
в свой список.Чтобы реализовать
IComparable<T>
интерфейс, вы должны реализоватьCompareTo(T other)
метод. Самый простой способ сделать это - вызвать метод CompareTo поля, которое вы хотите сравнить, которым в вашем случае является дата.Однако это не будет хорошо сортировать, потому что это будет использовать классическую сортировку по строкам (поскольку вы объявили дату как строку). Поэтому я думаю, что лучше всего было бы переопределить класс и объявить дату не как строку, а как DateTime. Код останется почти таким же:
Единственное, что вам нужно сделать при создании экземпляра класса, чтобы преобразовать вашу строку, содержащую дату, в тип DateTime, но это можно легко сделать, например,
DateTime.Parse(String)
методом.источник
В этом случае вы также можете выполнить сортировку с помощью LINQ:
источник
источник
Перво-наперво, если свойство date хранит дату, сохраните ее с помощью DateTime. Если вы анализируете дату с помощью сортировки, вам нужно анализировать ее для каждого сравниваемого элемента, это не очень эффективно ...
Затем вы можете создать IComparer:
Вы даже можете сделать это как делегат:
источник
Вы правы - вам нужно реализовать IComparable. Для этого просто объявите свой класс:
В CompareTo вы просто реализуете свой собственный алгоритм сравнения (для этого можно использовать объекты DateTime, но сначала обязательно проверьте тип «obj»). Для получения дополнительной информации см. Здесь и здесь .
источник
IComparable<T>
вероятно, будет лучшим выбором, так как это проверено на предпочтениеIComparable
: msdn.microsoft.com/en-us/library/b0zbh7b6.aspxВы можете использовать linq:
источник
посмотрите перегруженный метод Sort класса List. Есть несколько способов к этому. один из них: ваш настраиваемый класс должен реализовать интерфейс IComparable, тогда вы можете использовать метод Sort класса List.
источник
Спасибо за все быстрые ответы.
Это мое решение:
Спасибо
источник
источник