public class User
{
private int Age;
private string Name;
....
}
List<User> lstUser = new List<User>();
.....
List<User> tmp=lstUser.FindAll(delegate(User ur) { return ur.Age < 25; });
//Вот здесь не понятно как сравнивается предыдущее и следующие занчение
//тоесть как получается,что u1.Name!=u2.Nama
lstUser.Sort(delegate(User u1,User u2){return u1.Name.CompareTo(u2.Name);});
... << RSDN@Home 1.2.0 alpha rev. 789>>
Здравствуйте, linker, Вы писали:
//Вот здесь не понятно как сравнивается предыдущее и следующие занчение
//тоесть как получается,что u1.Name!=u2.Nama
lstUser.Sort(delegate(User u1,User u2){return u1.Name.CompareTo(u2.Name);});
помоему здесь то, что вам нужно... (возможно, ошибаюсь...)
http://www.rsdn.ru/article/csharp/AnonymousMethods.xml#ESHAE
Здравствуйте, Alex_the_first, Вы писали:
A__>Здравствуйте, linker, Вы писали:
A__>//Вот здесь не понятно как сравнивается предыдущее и следующие занчение
A__>//тоесть как получается,что u1.Name!=u2.Nama
A__>lstUser.Sort(delegate(User u1,User u2){return u1.Name.CompareTo(u2.Name);});
A__>помоему здесь то, что вам нужно... (возможно, ошибаюсь...)
A__>http://www.rsdn.ru/article/csharp/AnonymousMethods.xml#ESHAE
Да читаю сижу.Но все равно механиз до конца не понимаю.Ну не понятно мне как x.Price=5 и одновременно с этим y.Price=3,а не 5
Может кто переписать кусок без использования делегата,чтоб разобраться как все происходит
List<Article> articles = new List<Article>();
articles.Add(new Article(5,"Shoes"));
articles.Add(new Article(3,"Shirt"));
articles.Sort(delegate(Article x, Article y)
{
return Comparer<decimal>.Default.Compare(x.Price,y.Price);
});
... << RSDN@Home 1.2.0 alpha rev. 789>>
Здравствуйте, linker, Вы писали:
L>Может кто переписать кусок без использования делегата,чтоб разобраться как все происходит
L>class Article
{
//...
public static int CompareByPrice(Article x, Article y)
{
return Comparer<decimal>.Default.Compare(x.Price, y.Price);
}
}
L> List<Article> articles = new List<Article>();
L> articles.Add(new Article(5,"Shoes"));
L> articles.Add(new Article(3,"Shirt"));
L> articles.Sort(delegate(Article x, Article y)
L> {
L> return Comparer<decimal>.Default.Compare(x.Price,y.Price);
L> });
articles.Sort(Article.CompareByPrice);
L>
Сортировка, каким бы методом она не проводилась (в данном случае
QuickSort) всегда сводиться к сравниванию двух элементов (чтобы узнать какой из них должен идти раньше).
Т.о.
для сортировки произвольного множества элементов достаточно определить правило которое позволяет узнать какой из двух элементов больше (меньше).
У List есть метод
public void Sort(Comparison<T> comparison)
принимающий делегата
public delegate int Comparison<T>(T x, T y);
этот делегат представляет собой
шаблон правила: метод, принимающий два сравниваемых объекта и возвращающий 1, 0, -1 (первый элемент больше, равен, меньше).
delegate(User u1,User u2){return u1.Name.CompareTo(u2.Name);}
Это уже конкретное правило: "Юзер u1 больше u2, когда его имя "больше", ..." Сортировщик берет пары юзеров и, с помощью метода, узнает какой из юзеров должен быть раньше, а какой позже в списке.
В итоге получаем список юзеров отсортированных по имени.
СУВ,
Aikin
Здравствуйте, Aikin, Вы писали:
[]
A>В итоге получаем список юзеров отсортированных по имени.
A>СУВ, Aikin
спасибо за такое разжеванное объяснение
... << RSDN@Home 1.2.0 alpha rev. 789>>
L>спасибо за такое разжеванное объяснение
Да не за что, обращайся еще