Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как грамотно отсортировать коллекцию? / 11 сообщений из 11, страница 1 из 1
23.05.2013, 00:29
    #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
23.05.2013, 00:54
    #38269281
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как грамотно отсортировать коллекцию?
beg-in-er,

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

да всё подходит. чёта просто не вижу более простых способов.
...
Рейтинг: 0 / 0
23.05.2013, 00:59
    #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
23.05.2013, 01:16
    #38269299
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как грамотно отсортировать коллекцию?
bazile,

Спасибо.

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

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

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

2. Напиши код которое это учтет. Если Name не равны, то возвращаем результат их сравнения, иначе сравниваем X.
...
Рейтинг: 0 / 0
23.05.2013, 06:56
    #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
23.05.2013, 10:42
    #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
23.05.2013, 12:42
    #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
23.05.2013, 13:28
    #38269966
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как грамотно отсортировать коллекцию?
LameUserЧем так плох линк? Он вроде как более синтаксически понятен нежели ваше лямбда выражение.
Лишней тратой памяти. Мы же новый List создаем. Хотя раз больших объемов данных не ожидается, то это можно пережить.

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

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


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