Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 3 / 1
Регистрация: 26.05.2014
Сообщений: 59
1

Сортировка List внутри List

26.02.2018, 17:41. Показов 1462. Ответов 3
Метки нет (Все метки)

Доброго времени суток!

Имеется структура вида:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class Node
{
  public string Name { get; set; }
  public List<Node> Nodes { get; set; }
}
 
public static void Main()
{
  var items = new List<Node>();
  
  items.Add(
    new Node {
      Name = "Node_3",
      Nodes = new List<Node>()
    },
    new Node {
      Name = "Node_1",
      Nodes = new List<Node>()
    },
    new Node {
      Name = "Node_4",
      Nodes = new List<Node>()
    },
    new Node {
      Name = "Node_2",
      Nodes = new List<Node>()
    });
 
  foreach (var item in items)
  {
    item.Nodes.Add(
      new Node {
        Name = "Subnode_3"
      },
      new Node {
        Name = "Subnode_1"
      },
      new Node {
        Name = "Subnode_2"
      },
      new Node {
        Name = "Subnode_5"
      },
      new Node {
        Name = "Subnode_6"
      },
      new Node {
        Name = "Subnode_4"
      });
  }
 
  items = items.OrderBy(o => o.Name).ToList();
 
  foreach (var item in items)
  {
    item.Nodes.OrderBy(o => o.Name).ToList();
  }
}
Стоит задача упорядочить список items по возрастанию поля Name, и точно так же упорядочить каждый список Nodes в элементах items.
С упорядочиванием items проблем нет, всё выстраивается согласно ожиданиям ("Node_1", "Node_2"...), а вот подсписки отсортировать не получается.

Подскажите, в чём может быть ошибка и куда копать, чтобы её исправить?

Спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2018, 17:41
Ответы с готовыми решениями:

Сортировка двумерного List<List<string>>, по 1-ой строке, чтобы элементы 2-ой строки передвинулись в соответствии с 1-ой
Дан двумерный массив List&lt;List&lt;string&gt;&gt; , состоящий из двух строк, как его отсортировать по первой...

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например,...

Linq преобразование List<List<double>> в List<Array>
Доброго времени суток, данный код нужно преобразовать linq выражениями и дописать выборку из ...

Сортировка ДВУМЕРНОГО List<List<T>>
Добрый день или вечер. В написании одной программулины у меня возникли проблемы с сортировкой...

3
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
26.02.2018, 18:05 2
в последнем foreach ,ты никуда присваиваешь отсортированый список
1
.NET senior
437 / 355 / 137
Регистрация: 23.09.2016
Сообщений: 980
26.02.2018, 22:00 3
Interstellar, а ещё лучше будет воспользоваться in-place сортировкой у класса List (то есть использовать метод Sort). Так Вы и память сэкономите, и работать это будет всяко быстрее, чем Linq (особенно будет заметно на больших списках).

Подсказка: Вам лучше всего подойдёт вот эта перегрузка метода Sort.
1
1 / 3 / 1
Регистрация: 26.05.2014
Сообщений: 59
27.02.2018, 13:15  [ТС] 4
Цитата Сообщение от ahtik95 Посмотреть сообщение
в последнем foreach ,ты никуда присваиваешь отсортированый список
Это опечатка, там должно быть присваивание:
C#
1
item.Nodes = item.Nodes.OrderBy(o => o.Name).ToList();
bax_tang, спасибо за наводку!

В ходе тестирования обнаружилось, что сортировка всё же происходит, причём логически корректно. Ошибка была в моём ожидании результатов.
Например, массив вида { "Person_2", "Person_10", "Person_11" } сортируется поиндексно, следующим образом: { "Person_10", "Person_11", "Person_2" }. То есть, очевидно, для упорядочивания списка по возрастанию-убыванию нужно сперва каким-то образом выделить числовую часть (например, регулярным выражением "\d+"), конвертировать в числовой тип и затем сравнивать два числа.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2018, 13:15

Сортировка List<List<string>>
Как отсортировать список списков по количеству элементов в элементах :D или в удобоваримом для...

Как узнать размерность внутреннего вектора в массиве List<List<Double>>?
Добрый вечер! Уважаемые, подскажите пожалуйста, как узнать размерность внутренних строк в...

List<string> или все же List<StringBuilder>, что лучше использовать?
Добрый день, хочется узнать с точки зрения производительности что подходит лучше в данном случае. ...

Необходимо создать dll в которой буду обрабатывать list<list<string>>
Необходимо создать dll в которой буду обрабатывать list&lt;list&lt;string&gt;&gt; как объявить методы класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru