Объясните механизм
От: linker Россия  
Дата: 17.06.08 11:07
Оценка:
  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>>
Re: Объясните механизм
От: Alex_the_first  
Дата: 17.06.08 12:02
Оценка:
Здравствуйте, 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
Re[2]: Объясните механизм
От: linker Россия  
Дата: 17.06.08 12:34
Оценка:
Здравствуйте, 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>>
Re[3]: Объясните механизм
От: vitz  
Дата: 17.06.08 12:52
Оценка:
Здравствуйте, 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>
Re: Объясните механизм
От: Aikin Беларусь kavaleu.ru
Дата: 17.06.08 13:10
Оценка: 3 (1)
Сортировка, каким бы методом она не проводилась (в данном случае 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
Re[2]: Объясните механизм
От: linker Россия  
Дата: 17.06.08 13:23
Оценка:
Здравствуйте, Aikin, Вы писали:

[]

A>В итоге получаем список юзеров отсортированных по имени.


A>СУВ, Aikin


спасибо за такое разжеванное объяснение
... << RSDN@Home 1.2.0 alpha rev. 789>>
Re[3]: Объясните механизм
От: Aikin Беларусь kavaleu.ru
Дата: 17.06.08 13:26
Оценка:
L>спасибо за такое разжеванное объяснение
Да не за что, обращайся еще
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.