powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как грамотно отсортировать коллекцию?
11 сообщений из 11, страница 1 из 1
как грамотно отсортировать коллекцию?
    #38269258
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
допустим есть какой то класс, и его надо отсортировать по полю, скажем Name.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 class SomeClass
        {
            public string Name, N2;
            public int X, Y;
        }
 void Sorting()
  {
            //сделаем заготовку
            List<SomeClass> sm = new List<SomeClass>();
            Random R = new Random();
            for (int q = 0; q < 10; q++)
                sm.Add(new SomeClass() { X = R.Next(1,1000), Y = q, Name = "A" + R.Next(1,100),N2="dd"+q });

            //сам процес
            SomeClass[] SM = sm.ToArray();
            string [] tempArrString=new string[SM.Length];
            for (int q = 0; q < tempArrString.Length; q++)     
            tempArrString[q] = SM[q].Name;
                Array.Sort(tempArrString,SM);
            //SM отсортирован
  }


всё вроде работает , но как то коряво смотрится. наверняка есть способы и правильнее и красивше.

скажем в метод подаётся имя поля , по которому сортируется , и сам массив, или коллекция
Код: c#
1.
2.
3.
4.
void MySort(string SortFieldName, SomeClass[] Value)
{
  ....
}



скорость наверное тут не особо важна . миллион строк сортировать никто не намерен.
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269281
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

а Linq чем не подходит?
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269286
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

да всё подходит. чёта просто не вижу более простых способов.
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269289
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class SomeClass : IComparable<SomeClass>
{
	public string Name, N2;
	public int X, Y;
	
	public int CompareTo(SomeClass other)
	{
		return Name.CompareTo(other.Name);
	}
}

//сделаем заготовку
List<SomeClass> sm = new List<SomeClass>();
Random R = new Random();
for (int q = 0; q < 10; q++)
{
	sm.Add(new SomeClass() { X = R.Next(1,1000), Y = q, Name = "A" + R.Next(1,100),N2="dd"+q });
}

sm.Sort();
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269299
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

Спасибо.

но возникает 2 вопроса,
1. если в зависимости от условий надо будет сортануть не по полю Name а по другому, по Х
что делать с методом CompareTo
2. если допустить , что нужно сортировать одновременно по 2м полям, ну типа сначала Name , потом X
то как быть в такой ситуации.

может вопрос и простой. просто в своё время не закрыл его , а нынче вроде оно надо , а голова не варит в этом направлении.
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269301
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

1. IComparer<T> + List<T>.Sort(IComparer<T>)

2. Напиши код которое это учтет. Если Name не равны, то возвращаем результат их сравнения, иначе сравниваем X.
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269369
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем изобретать велосипед?

var collection = List<SomeClass>

Код: c#
1.
2.
collection.Sort((firstObject,secondObject) => firstObject.Name.CompareTo(secondObject.Name));
collection.Sort((firstObject,secondObject) => firstObject.X.CompareTo(secondObject.X));



Для двух полей:

Код: c#
1.
collection = collection.OrderBy(someClass => someClass .Name).ThenBy(someClass => someClass.X).ToList();
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269586
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUser, хорошее предложение, только отсортировать по двум полям можно и без LINQ - sm.Sort((first,second) => { int temp = first.Name.CompareTo(second.Name); return temp == 0 ? first.X - second.Y : temp;});
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269854
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileLameUser, хорошее предложение, только отсортировать по двум полям можно и без LINQ - sm.Sort((first,second) => { int temp = first.Name.CompareTo(second.Name); return temp == 0 ? first.X - second.Y : temp;});

Чем так плох линк? Он вроде как более синтаксически понятен нежели ваше лямбда выражение.
Если сортировать по трем полям будет еще запутаннее лямбда.
Учитывая авторскорость наверное тут не особо важна . миллион строк сортировать никто не намерен.
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38269966
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUserЧем так плох линк? Он вроде как более синтаксически понятен нежели ваше лямбда выражение.
Лишней тратой памяти. Мы же новый List создаем. Хотя раз больших объемов данных не ожидается, то это можно пережить.

LameUserЕсли сортировать по трем полям будет еще запутаннее лямбда.
Согласен. Но тогда можно вернуться к варианту с IComparer<T>. Особенно если эта сортировка нужна в нескольких местах.
...
Рейтинг: 0 / 0
как грамотно отсортировать коллекцию?
    #38270926
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUserЗачем изобретать велосипед?[/src]

спасибо. хороший пример. правда нынче он не пригодится. я там больше не тружусь.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как грамотно отсортировать коллекцию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]