Как отсортировать список пользовательских массивов по элементам dateTime - PullRequest
2 голосов
/ 01 декабря 2010

У меня есть ArrayList с экземплярами класса (в данном случае 'loan'). Этот класс ссуды содержит переменную «дата». Я хочу отсортировать мой ArrayList по этим переменным даты наиболее оптимальным способом.

Способ, которым я раньше занимался сортировкой дат, это использовать List<DateTime>. но в этом случае я хочу отсортировать список / массив, сохраняя остальную информацию, чтобы всю информацию можно было использовать в другом месте

Ответы [ 4 ]

3 голосов
/ 01 декабря 2010

Для этого можно использовать System.Linq.Enumerable методы расширения Cast<T> и OrderBy:

ArrayList list;

List<Loan> loanes = (
    from loan in list.Cast<Loan>()
    orderby loan.Date
    select loan).ToList();
2 голосов
/ 01 декабря 2010

Вам нужно сделать IComparer<Loan>, который возвращает x.Date.CompareTo(y.Date).

1 голос
/ 01 декабря 2010

То, что Слэкс сказал в основном для сортировки на месте в ArrayList, вам нужна пользовательская реализация IComparer, ниже приведен пример:

public class Loan
{
    public DateTime date { get; set; }

}

public class LoanComparer : IComparer
{
    public int Compare(object x, object y)
    {
        Loan loanX = x as Loan;
        Loan loanY = y as Loan;

        return loanX.date.CompareTo(loanY.date);
    }
}


static void Main(string[] args)
{
    Loan l1 = new Loan() {date = DateTime.Now};
    Loan l2 = new Loan() { date = DateTime.Now.AddDays(-5) };

    ArrayList loans = new ArrayList();
    loans.Add(l1);
    loans.Add(l2);


    loans.Sort(new LoanComparer());
}
0 голосов
/ 20 июля 2012

вы не должны использовать ArrayList вообще. Вместо этого вы должны использовать строго типизированный шаблон List<DateTime>.

Для пользовательской сортировки существует перегрузка метода Sort, который принимает компаратор. Отменив обычное сравнение, вы получите сортировку в порядке убывания:

list.Sort(delegate(DateTime x, DateTime y){ return y.CompareTo(x); });

Обновление:

С помощью лямбда-выражений в C # 3 делегат легче создать:

list.Sort((x, y) => y.CompareTo(x));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...