powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сортировка List<class>
16 сообщений из 41, страница 2 из 2
Сортировка List<class>
    #38472433
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Код: c#
1.
list2.OrderBy(i => i).ToList();



тут же нет Comparsion. выполняется нативное сравнение, так вот это и нечестно :)
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472435
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и да, тут не делегат, а Expression. вещи совершенно разные.
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472483
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ, тут же нет Comparsion. выполняется нативное сравнение, так вот это и нечестно :)
Не понял тебя. Тут и не должно быть Comparsion, мы же сравниваем Sort(Comparsion) vs OrderBy(). Сравнение честное.

hVosttи да, тут не делегат, а Expression. вещи совершенно разные.
i => i - это сокращенная запись делегата, учите матчасть, товарещ :)
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472488
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
public delegate TResult Func<in T, out TResult>(T arg);



:)
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472492
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУi => i - это сокращенная запись делегата, учите матчасть, товарещ :)

нет. не путай лямбда-выражение Expression и делегат Func/Action записанный с использованием лямбда-подставновки аргументов.

ето ещё кому надо матчасть учить :)
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472503
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

разницу чувствуешь между

Expression<Func<TSource, TKey>>

и

Func<TSource, TKey>

?
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472505
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУi => i - это сокращенная запись делегата, учите матчасть, товарещ :)

нет. не путай лямбда-выражение Expression и делегат Func/Action записанный с использованием лямбда-подставновки аргументов.

ето ещё кому надо матчасть учить :)

Жжете, батенька :)

Код: c#
1.
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472507
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ,

разницу чувствуешь между

Expression<Func<TSource, TKey>>

и

Func<TSource, TKey>

?

Чувствую. И?

В обоих случаях используется делегат :)

P.S. Хвост, не позорься, хватит. Стыдно же будет...
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472512
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, милок, ты меня решил основам LINQ подучить? А пупок не развяжется?

P.S. Всё, кончай балаган. У нас тема другая.
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472576
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже википедия знает о делегатах :)

http://ru.wikipedia.org/wiki/Лямбда-выражения Лямбда-выражение (в программировании) — это специальный синтаксис для объявления анонимных делегатов по месту их использования. Используя лямбда-выражения, можно объявлять функции в любом месте кода. Обычно лямбда-выражение допускает замыкание на лексический контекст, в котором это выражение использовано.


То есть лямбда OrderBy(i => i) есть ни что иное, как делегат. Собственно, это вытекает даже из определения

Код: c#
1.
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);



И никакими тут Expression не пахнет даже. Expression<Func> используется в классе Queryable реализациях и никакого отношения к теме не имеет. И тем не менее, даже в этом случае скомпилированное дерево использует указатель на метод (делегат).

Хвост, когда перестанешь спорить с тем, с чем не до конца разобрался?
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472594
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

да погоди ты. много ты знаешь о том, как компилятор работает. LINQ родной для .NET, и делегат он легко переводит в Expression. можешь в рефлекторе глянуть. особенно такие вещи i => i, он сравнивает i, не адресуя вызов анонимному делегату (который вообще не создаётся , ни строчки кода).

и давай по-честному:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
class Program
    {
        class MyClass : IComparable<MyClass>
        {
            private readonly int _field1;
            private readonly string _field2;

            public MyClass(int v)
            {
                _field1 = v;
                _field2 = "par" + v;
            }

            public int CompareTo(MyClass other)
            {
                return _field1.CompareTo(other._field1);
            }
        }


        private static List<MyClass> CreateList(int size)
        {

            // use the same seed so that every list has the same elements
            var random = new Random(589134554);

            var list = new List<MyClass>(size);
            for (int i = 0; i < size; ++i)
                list.Add(new MyClass(random.Next()));
            return list;
        }

        private static void Benchmark(int size, bool output = true)
        {
            var list1 = CreateList(size);
            var list2 = CreateList(size);

            var stopwatch = Stopwatch.StartNew();
            list1.Sort((a, b) => a.CompareTo(b));
            stopwatch.Stop();
            var elapsedSort = stopwatch.Elapsed.TotalMilliseconds;
            if (output)
                Console.WriteLine("List({0}).Sort(): {1}ms (100%)", size, elapsedSort);

            stopwatch.Restart();
            list2.OrderBy(i => i).ToList();
            stopwatch.Stop();
            var elapsedOrderBy = stopwatch.Elapsed.TotalMilliseconds;
            if (output)
                Console.WriteLine("List({0}).OrderBy(): {1}ms ({2:.00%})", size, elapsedOrderBy, elapsedOrderBy / elapsedSort);

        }

        static void Main(string[] args)
        {
            // ensure linq library is loaded and initialized
            Benchmark(1000, false);

            Benchmark(10);
            Benchmark(100);
            Benchmark(1000);
            Benchmark(10000);
            Benchmark(100000);
            Benchmark(1000000);

            Console.ReadKey();
        }
    }
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472606
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЧувствую. И?

В обоих случаях используется делегат :)

нет:

1. a => a.Field

2. a => a.Field1 + a.Field2

во втором случае обычный Func будет делегатом, а в случае Expression Будет 2 узла и 1 операция, никаких делегатов.
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472641
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУ, да погоди ты. много ты знаешь о том, как компилятор работает. LINQ родной для .NET, и делегат он легко переводит в Expression. можешь в рефлекторе глянуть. особенно такие вещи i => i, он сравнивает i, не адресуя вызов анонимному делегату (который вообще не создаётся , ни строчки кода).
Отрой документацию, хватит уже фантазировать Лямбда выражение не обязательно должно строиться с помощью Expression, прекращай писать глупости. Когда лямбда-выражение назначается переменной с типом Expression<TDelegate> , компилятор выдает код для создания дерева выражений, представляющего лямбда-выражение. Компиляция деревьев выражений: тип Expression<TDelegate> предоставляет метод Compile , который компилирует код, представляемый деревом выражений, в исполняемый делегат. Таким образом в конечном итоге у нас будет не Expression, как ты пишешь, а делегат . Заруби это на носу!
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472644
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУЧувствую. И?

В обоих случаях используется делегат :)

нет:

1. a => a.Field

2. a => a.Field1 + a.Field2

во втором случае обычный Func будет делегатом, а в случае Expression Будет 2 узла и 1 операция, никаких делегатов.

Мля, клоунада продолжается

1. "Обычный" Func не "будет делегатом", это и есть делегат ))
2. Как собирается Expression, я тебе написал выше. Он собирается в конечном итоге тоже в делегат ))

P.S. Учи матчасть, не зли меня
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472674
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ладно, ладно... убедил. чертяка красноречивый.

П.С. и всё-таки она вертится!
...
Рейтинг: 0 / 0
Сортировка List<class>
    #38472696
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, лан, давай завязывать

Основной момент - Sort в любом случае шустрее, как ни крути. Если у нас List, то лучше использовать штатный метод Sort.
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сортировка List<class>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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