Как отсортировать список в С#
У меня есть класс:
public class MyObject
{
public string Name;
public int Age;
}
У меня есть список объектов Myobject:
Name Age
ABC 12
BBC 14
ABC 11
Как отсортировать этот список с условием: sort Name first and sort Age later. С этим списком результат после сортировки:
Name Age
ABC 11
ABC 12
BBC 14
Ответы
Ответ 1
class Program
{
static void Main(string[] args)
{
var list = new List<MyObject>(new[]
{
new MyObject { Name = "ABC", Age = 12 },
new MyObject { Name = "BBC", Age = 14 },
new MyObject { Name = "ABC", Age = 11 },
});
var sortedList = from element in list
orderby element.Name
orderby element.Age
select element;
foreach (var item in sortedList)
{
Console.WriteLine("{0} {1}", item.Name, item.Age);
}
}
}
Ответ 2
Два разных способа использования LINQ:
1) Используя OrderBy
и ThenBy
:
l = l.OrderBy(x => x.Name).ThenBy(x => x.Age).ToList();
2) Использование синтаксиса запроса:
l = (from x in l
orderby x.Name, x.Age
select x).ToList();
Ответ 3
Используя System.Linq
, вы можете легко ее выполнить:
list = list.OrderBy(e=>e.Name).ThenBy(e=>e.Age);
Также проверьте этот ответ: Сортировка списка с использованием Lambda/Linq для объектов.
Ответ 4
Вы можете использовать LINQ:
class Program
{
static void Main(string[] args)
{
List<MyObject> list = new List<MyObject>();
list.Add(new MyObject() { Age = 12, Name = "ABC" });
list.Add(new MyObject() { Age = 11, Name = "ABC" });
list.Add(new MyObject() { Age = 14, Name = "BBC" });
var sorted = list.OrderBy(mo => mo.Name).ThenBy(mo => mo.Age);
foreach (var myObject in sorted)
{
Console.WriteLine(string.Format("{0} - {1}",
myObject.Name, myObject.Age));
}
}
}
Ответ 5
Вы можете передать новый объект для заказа так, чтобы он заказывал с помощью
class Program
{
static void Main(string[] args)
{
var list = new List<MyObject>(new[]
{
new MyObject { Name = "ABC", Age = 12 },
new MyObject { Name = "BBC", Age = 14 },
new MyObject { Name = "ABC", Age = 11 },
});
var sortedList = list.OrderBy( x => new { x.Name , x.Age });
foreach (var item in sortedList)
{
Console.WriteLine("{0} {1}", item.Name, item.Age);
}
}
}