Сортировать листинг классов по переменной из элементов..

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Сортировать листинг классов по переменной из элементов..

Сообщение KorsaiR 20 окт 2013, 18:39

Привет всем.

Нужно отсортировать листинг классов по переменной из этих классов. То есть:

Есть класс:

public class Items_obj{
public string I_name;
public int I_cena;
public int lvl;
}

Есть листинг:
public List<Items_obj> row = new List<Items_obj>();

Необходимо отсортировать листинг row в порядке возрастания переменной lvl.

То есть если у нас имеется 3 элемента, в которых:
1)lvl =2
2)lvl =1
3)lvl =3

надо отсортировать их так, чтобы элемент с лвл = 1 стоял первый в листинге, элемент с лвл =2 стоял вторым, и так далее...

Есть у кого варианты как это сделать?
Мои игры: Sunrise, Fireground, Spacerift
Sunrise: _www.sunsurv.ru , _https://store.steampowered.com/app/6631 ... _survival/
Fireground: _https://store.steampowered.com/app/1026 ... ND/?beta=0
Spacerift: _https://vk.com/spacerift
Аватара пользователя
KorsaiR
Старожил
 
Сообщения: 797
Зарегистрирован: 09 июл 2012, 12:20
Откуда: Новосибирск
Skype: pwiliya

Re: Сортировать листинг классов по переменной из элементов..

Сообщение BornFoRdeatH 20 окт 2013, 18:46

LINQ вам о чем-то говорит?

будет что-то типа такого
Синтаксис:
Используется csharp
var sorted = row.OrderBy(i => i.lvl);
 


UPD. Наверное еще ToList() надобно добавить
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Сортировать листинг классов по переменной из элементов..

Сообщение Woolf 20 окт 2013, 19:28

А можно еще перегрузить сортировку и сортировать стандартным Sort
http://msdn.microsoft.com/ru-ru/library/3da4abas.aspx
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Сортировать листинг классов по переменной из элементов..

Сообщение BornFoRdeatH 20 окт 2013, 20:04

Woolf писал(а):А можно еще перегрузить сортировку и сортировать стандартным Sort
http://msdn.microsoft.com/ru-ru/library/3da4abas.aspx

Ну и так конечно тоже, только я вот про это уже забыл, когда в проекте подобных вещей порядком то все перегружать это большая трата времени, быстрее написать одну LINQ строку :) тем более после компиляции результат практически в целом идентичен.
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Сортировать листинг классов по переменной из элементов..

Сообщение Woolf 20 окт 2013, 20:27

BornFoRdeatH писал(а):
Woolf писал(а):А можно еще перегрузить сортировку и сортировать стандартным Sort
http://msdn.microsoft.com/ru-ru/library/3da4abas.aspx

Ну и так конечно тоже, только я вот про это уже забыл, когда в проекте подобных вещей порядком то все перегружать это большая трата времени, быстрее написать одну LINQ строку :) тем более после компиляции результат практически в целом идентичен.



Ну, можно перегрузить то и в самом классе принцип, как их сравнивать. И при проектировании класса это учитывать. Я про метод Compare. Просто через LINQ не все можно сделать, например, как сортировать при равных значениях? А вот можно взять второе значение. Ну, для примера, вы сортируете игроков по уровню - у вас 10 человек, у которых уровень 5. Как вы их отсортируете? А ведь позиция в рейтинге вещь важная! А вот можно взять еще параметр, что первым будет тот, у кого опыта на 6й уровень набрано больше.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Сортировать листинг классов по переменной из элементов..

Сообщение BornFoRdeatH 20 окт 2013, 21:01

Woolf писал(а):Ну, можно перегрузить то и в самом классе принцип, как их сравнивать. И при проектировании класса это учитывать. Я про метод Compare. Просто через LINQ не все можно сделать, например, как сортировать при равных значениях? А вот можно взять второе значение. Ну, для примера, вы сортируете игроков по уровню - у вас 10 человек, у которых уровень 5. Как вы их отсортируете? А ведь позиция в рейтинге вещь важная! А вот можно взять еще параметр, что первым будет тот, у кого опыта на 6й уровень набрано больше.

Ну не спорю что с некоторыми задачами он может не справится, но с вышеперечисленными вроде все впорядке, запрос составить не столь трудно, формулы туда "безразмерные" лезут и операторы сравнения кушаются, правда может строка быть немного странновата и длинновата :)
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Сортировать листинг классов по переменной из элементов..

Сообщение Woolf 20 окт 2013, 21:30

Спорить не буду ) Просто хотелось осветить вопрос подробнее, что не только через LINQ можно красиво и правильно сортировать. Я к тому говорю, что вот у меня есть гуикомпонент листбокс. Ему вообще по барабану, что там у него в списке лежит. И у него есть флажок - сортировка. При активном флажке он делает сорт. А правильная сортировка, как список сортировать - заложена в классе-элементе списка листбокса. Вот такой у меня универсальный подход.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Сортировать листинг классов по переменной из элементов..

Сообщение BornFoRdeatH 20 окт 2013, 21:37

Woolf писал(а):Спорить не буду ) Просто хотелось осветить вопрос подробнее, что не только через LINQ можно красиво и правильно сортировать. Я к тому говорю, что вот у меня есть гуикомпонент листбокс. Ему вообще по барабану, что там у него в списке лежит. И у него есть флажок - сортировка. При активном флажке он делает сорт. А правильная сортировка, как список сортировать - заложена в классе-элементе списка листбокса. Вот такой у меня универсальный подход.

НУ лично мое мнение, что для каждой задачи нужен свой подход, если есть что-то конкретное и действительно оправдано, то почему бы и нет, я хотел только сказать что linq справляется с большинством повседневных задач значительно сокращая время работы, очень удобная штука, особенно после делфи для меня это было неимоверное открытие и прозрение :)
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 28