Как отсортировать список < T > по свойству в объекте

Для загрузки нескольких изображений (модификация к решению @ IvanBaev)

function readURL(input) {
    if (input.files && input.files[0]) {
        var i;
        for (i = 0; i < input.files.length; ++i) {
          var reader = new FileReader();
          reader.onload = function (e) {
              $('#form1').append('');
          }
          reader.readAsDataURL(input.files[i]);
        }
    }
}

http://jsfiddle.net/LvsYc/12330/

Надеюсь, это поможет кому-то.

1091
задан poke 16 December 2015 в 09:45
поделиться

7 ответов

Самый простой способ, который я могу придумать, это использовать Linq:

List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList();
1684
ответ дан 19 December 2019 в 20:14
поделиться

Используйте LiNQ OrderBy

List<Order> objListOrder=new List<Order> ();
    objListOrder=GetOrderList().OrderBy(o=>o.orderid).ToList();
1
ответ дан 19 December 2019 в 20:14
поделиться

Использование LINQ

objListOrder = GetOrderList()
                   .OrderBy(o => o.OrderDate)
                   .ToList();

objListOrder = GetOrderList()
                   .OrderBy(o => o.OrderId)
                   .ToList();
4
ответ дан 19 December 2019 в 20:14
поделиться

Делаем это без Linq, как вы сказали:

public class Order : IComparable
{
    public DateTime OrderDate { get; set; }
    public int OrderId { get; set; }

    public int CompareTo(object obj)
    {
        Order orderToCompare = obj as Order;
        if (orderToCompare.OrderDate < OrderDate || orderToCompare.OrderId < OrderId)
        {
            return 1;
        }
        if (orderToCompare.OrderDate > OrderDate || orderToCompare.OrderId > OrderId)
        {
            return -1;
        }

        // The orders are equivalent.
        return 0;
    }
}

Затем просто вызовите .sort () в вашем списке заказов

32
ответ дан 19 December 2019 в 20:14
поделиться

Самый простой способ упорядочить список - использовать OrderBy

 List<Order> objListOrder = 
    source.OrderBy(order => order.OrderDate).ToList();

Если вы хотите упорядочить по нескольким столбцам, как в следующем SQL-запросе.

ORDER BY OrderDate, OrderId

Для этого вы можете использовать ThenBy, как показано ниже.

  List<Order> objListOrder = 
    source.OrderBy(order => order.OrderDate).ThenBy(order => order.OrderId).ToList();
102
ответ дан 19 December 2019 в 20:14
поделиться

Чтобы сделать это без LINQ на .Net2.0:

List<Order> objListOrder = GetOrderList();
objListOrder.Sort(
    delegate(Order p1, Order p2)
    {
        return p1.OrderDate.CompareTo(p2.OrderDate);
    }
);

Если вы на .Net3.0, то ответ LukeH ответ - это то, что вам нужно.

Для сортировки по нескольким свойствам, вы все еще можете сделать это в делегате. Например:

orderList.Sort(
    delegate(Order p1, Order p2)
    {
        int compareDate = p1.Date.CompareTo(p2.Date);
        if (compareDate == 0)
        {
            return p2.OrderID.CompareTo(p1.OrderID);
        }
        return compareDate;
    }
);

Это даст вам возрастающие даты с убывающими orderIds.

Однако я бы не рекомендовал использовать делегаты, так как это означает много мест без повторного использования кода. Вам следует реализовать IComparer и просто передать его методу Sort. См. здесь.

public class MyOrderingClass : IComparer<Order>
{
    public int Compare(Order x, Order y)
    {
        int compareDate = x.Date.CompareTo(y.Date);
        if (compareDate == 0)
        {
            return x.OrderID.CompareTo(y.OrderID);
        }
        return compareDate;
    }
}

И затем, чтобы использовать этот класс IComparer, просто инстанцируйте его и передайте его в метод Sort:

IComparer<Order> comparer = new MyOrderingClass();
orderList.Sort(comparer);
211
ответ дан 19 December 2019 в 20:14
поделиться

Если вам нужно сортировать список на месте, то вы можете использовать Sort метод, передав Comparison делегат:

objListOrder.Sort((x, y) => x.OrderDate.CompareTo(y.OrderDate));

Если вы предпочитаете создать новую отсортированную последовательность, а не сортировать на месте, то вы можете использовать OrderBy метод LINQ, как упоминалось в других ответах.

716
ответ дан 19 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: