Как отсортировать по значению члена списка <> в родительском списке <> - PullRequest
0 голосов
/ 06 марта 2009

У меня есть вопрос сортировки списка. Я использую c # 3.0 и общую структуру списка следующим образом:

public class myObject
{
    public int ID { get; set; }
    public List<mySetting> setting { get; set; }
}

public class mySetting
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }  // sort on this!
}

с этой структурой я заполняю список myObject запросом LINQ.

List<myObject> lmo = new List<myObject>();
lmo.SomeFillOperation():

Теперь я хочу отсортировать все List<myObject> по отдельным <mySetting>[].Value значениям. РЕДАКТИРОВАТЬ: (Так что это будет сортировка по одному ключевому индексу, например, mySetting [3] .Value). Я понимаю, что мог бы сделать это в моем SomeFillOperation(), но я хочу сделать это после того, как список сформирован.

Есть ли рекомендуемый или простой способ сделать это? Есть ли хороший пример, который вы видели? Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 06 марта 2009

Ну, List<T> уже имеет метод Sort, если вы хотите отсортировать его на месте - или вы можете использовать метод LINQ OrderBy. OrderBy немного проще, чем Sort:

var sorted = lmo.OrderBy(x => x.Value);

но даже Sort не так уж и плохо:

lmo.Sort((x, y) => x.Value.CompareTo(y.Value));

РЕДАКТИРОВАТЬ: Прочитав комментарий к вопросу, я больше не понимаю вопрос! Оставив здесь этот ответ в качестве потенциально полезного заполнителя, пока я ужинаю ...

1 голос
/ 06 марта 2009
int MyObjectComparison(MyObject x, MyObject y)
{
     return x.setting[0].Value.CompareTo(y.setting[0].Value);
}

lmo.Sort(MyObjectComparison);

Конечно, это предполагает, что вы хотите использовать Значение первого элемента в настройке (и эта настройка гарантированно должна иметь хотя бы один элемент). Решение с меньшим количеством предположений будет найдено, когда будет предоставлено больше информации.

0 голосов
/ 06 марта 2009

Поскольку вы используете 3.0, используйте LINQ:

var newList = lmo.OrderBy(i => i.Value);

и

var newList = lmo.OrderByDescending(i => i.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...