У меня есть список объектов, в которых объект имеет 2 атрибута: id
и name
. Я должен заказать список по названию объектовЗаказать список объектов
Как это сделать?
У меня есть список объектов, в которых объект имеет 2 атрибута: id
и name
. Я должен заказать список по названию объектовЗаказать список объектов
Как это сделать?
Linq является излишним для этого, когда есть встроенные методы для этого.
Если вы имеете в виду массив, просто использовать Array.Sort
:
Array.Sort(items, (x, y) => x.Name.CompareTo(y.Name));
Если вы имеете в виду List<T>
, используйте Sort
функцию там:
items.Sort((x, y) => x.Name.CompareTo(y.Name));
+1 для использования встроенной поддержки списка для сортировки, а не для выхода в Linq (не в том, что с Linq нет ничего плохого, но в этом случае это чрезмерное IMHO и не дает никакой большей ясности цели) –
Верно об использовании встроенной поддержки, но, как кто-то сказал, что он не заботится о нулевых случаях ... Теперь вы можете изменить приведенное выше, чтобы позаботиться об этих случаях, но затем код уже не так чист. то его выбор между простым orderby и выше с нулевой проверкой ... Я нахожусь на заборе, что лучше в этом случае ... – anthonyv
@anthonyv - все справедливые точки. И да - он потеряет часть своей краткости после того, как вы положили нулевую регистрацию. Тем не менее - приятно видеть, что люди кладут на стол несколько разных решений. –
Вы пытались использовать linq?
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
public class Test
{
public void SortTest()
{
var myList = new List<Item> { new Item { Name = "Test", Id = 1 }, new Item { Name = "Other", Id = 1 } };
var result = myList.OrderBy(x => x.Name);
}
}
public class Item
{
public string Name { get; set; }
public int Id { get; set; }
}
}
Если вы имеете дело со списком этих объектов , самым простым способом является сравнение Сравнение метода Сорта:
var list = new List<MyObject>();
...
list.Sort((item1, item2) => item1.Name.CompareTo(item2.Name));
(Над образцом не выполняется проверка нулевого имени)
Это хорошо и просто, потому что строка реализует IComparable<string>
. Альтернативой было бы для вас реализовать IComparable<MyObject>
на классе, а затем вы можете просто позвонить list.Sort()
Способ по List<T>
класса Sort
имеет перегрузку, которая принимает пользовательские сравнения:
list.Sort((x,y) => x.Name.CompareTo(y.Name));
Немного больше информации на объекте было бы полезно. –