Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
Как сделать сортировку что бы самому передавать параметры для сортировки например Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Но как мне самому задавать параметр сортировки, что бы сортировалось не только по regnumber а если нужно то по date и т д? Должно быть наподобие такого Код: c# 1. 2. 3. 4. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 15:54 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
VIT2708, используй Sort принимающий делегат Comparison<T> или IComparer<T>. В первом случае можно так написать: Код: c# 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 16:06 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
bazile, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 16:49 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУ Enumerable.OrderBy родной List.Sort совершенно однозначно быстрее. На пару процессорных тиков? OrderBy универсальнее, можно в лямбде строить сложные lazy конструкции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 22:24 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУНа пару процессорных тиков? тактов. а это окала 30мс. в асинхронных задачах с конскими просадами на переключение контекста это ещё ой как сказывается. вообще, OrderBy не является сортировкой. это упорядочивание. можно надеяться на то, что трансляция дерева выражений приведёт нас к SQL-ому ORDER BY, или может даже к QSort, но гарантий вообще нет. никаких. в свою очередь List.Sort даёт прогнозируемую сложность сортировки. кто копался в рефлекторе, может обнаружить, что там не одна сортировка кроме qsort, выбирается самая оптимальная. от orderby ожидать такого не приходится. и да. конечно же. на маленьких коллекциях тыщей больше, тыщей меньше, особой разницы мы не увидем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:15 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVostt, ты чего несешь? Причем тут трансляция? Какие гарантии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:22 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, погугли слово "сортировка". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:28 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, For LINQ to Objects, it's a stable quicksort that is used. For any other kind of LINQ, it's left to the underlying implementation. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:30 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVostt, ты понимаешь, что такое трансляция? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:34 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, бенчмарки List(10).Sort(): 0,0025ms (100%) List(10).OrderBy(): 0,0157ms (628,00%) List(100).Sort(): 0,0068ms (100%) List(100).OrderBy(): 0,0294ms (432,35%) List(1000).Sort(): 0,0758ms (100%) List(1000).OrderBy(): 0,3107ms (409,89%) List(10000).Sort(): 0,8969ms (100%) List(10000).OrderBy(): 4,0751ms (454,35%) List(100000).Sort(): 10,8541ms (100%) List(100000).OrderBy(): 50,3497ms (463,88%) List(1000000).Sort(): 124,1001ms (100%) List(1000000).OrderBy(): 705,0707ms (568,15%) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:36 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУhVostt, ты понимаешь, что такое трансляция? :) не, это я просто так сказал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:36 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУhVostt, ты понимаешь, что такое трансляция? :) не, это я просто так сказал Трансляция в ОРМ, дерево выражений LINQ транслируется в sql конструкции. А по поводу бенча завтра проверю. Нативный сорт быстрее, бесспорно, но вот с порядком вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:41 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУА по поводу бенча завтра проверю. сделай 2 теста. на NET 4.0 и 4.5. Отдельно. сильно удивишься )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:45 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
И кстати, проверь нативный сорт на делегате с Comparison. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:45 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУА по поводу бенча завтра проверю. сделай 2 теста. на NET 4.0 и 4.5. Отдельно. сильно удивишься )) Ну говори уже. Я с мобилы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:46 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУТрансляция в ОРМ ну дык не обязательно. в случае LINQ to objects дерево транслируется непосредственно в исполняемый IL. отсюда существуют прекомпилируемые LINQ выражения, чтобы не разворачивать в рантайме дерево каждый раз. просто в оконцовке там не самая эффективная реализация qsort (при чем стабильная). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:47 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУНу говори уже. Я с мобилы :) реализация в 4.0 и 4.5 сортировке сильно отличается. в 4.5 существует некое подобие эвристики чтоли. выбирается наиболее удачный метод сортировки по каким-то своим критериям. т.е. там не всегда будет qsort. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 23:49 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУТрансляция в ОРМ ну дык не обязательно. в случае LINQ to objects дерево транслируется непосредственно в исполняемый IL. отсюда существуют прекомпилируемые LINQ выражения, чтобы не разворачивать в рантайме дерево каждый раз. просто в оконцовке там не самая эффективная реализация qsort (при чем стабильная). Ну так можно сказать, что весь дотнет код транслируется в мсил :) Не фантазируй, короче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 00:11 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУНу говори уже. Я с мобилы :) реализация в 4.0 и 4.5 сортировке сильно отличается. в 4.5 существует некое подобие эвристики чтоли. выбирается наиболее удачный метод сортировки по каким-то своим критериям. т.е. там не всегда будет qsort. Погоняй на сложных сортировках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 00:11 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVostt, тестировал на 1 млн элементов: ... Код: c# 1. Код: c# 1. FW 4.5List(1000000).Sort(): 281,7841ms (100%) List(1000000).OrderBy(): 331,0803ms (117,49%) FW 4.0List(1000000).Sort(): 298,3634ms (100%) List(1000000).OrderBy(): 328,2193ms (110,01%) Как видишь вполне себе приемлемые показатели. А вот если сравнивать без (a, b) => a.CompareTo(b), а с простым методом Sort() без делегата, то Sort() рвёт в пух и прах: ...List(1000000).Sort(): 72,6328ms (100%) List(1000000).OrderBy(): 338,6388ms (466,23%) Итого: как я и говорил, разница в "паре процессорных тиках". Для простой сортировки, не требуещей Sort(Comparison<T> comparison), да - прирост производительности в 4 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 09:20 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, ну так а ты передай в OrderBy делегат Comparsion, а то нечестно так сравнивать :) нативное сравнение для Int32 явно быстрее делегата, так как компилятор оптимизирует, оперируя с регистрами (без вызова методов, а это явно медленнее, так как делегаты не инлайнятся). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 09:29 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУразница в "паре процессорных тиках" и всё-таки тактов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 09:36 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttну так а ты передай в OrderBy делегат Comparsion, а то нечестно так сравнивать :) Не понял. А я что по-твоему делаю? :) Я ж говорю, с Comparsion практически идентично, без Comparsion Sort рвет в пух и прах. Но по сабжу нужен именно с Comparsion. Следовательно, OrderBy вполне приемлем. hVosttнативное сравнение для Int32 явно быстрее делегата, так как компилятор оптимизирует, оперируя с регистрами (без вызова методов, а это явно медленнее, так как делегаты не инлайнятся). О чем и речь. В OrderBy используется по сути тот же анонимный делегат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 09:39 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, Код: c# 1. тут же нет Comparsion. выполняется нативное сравнение, так вот это и нечестно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:09 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
и да, тут не делегат, а Expression. вещи совершенно разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:09 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУ, тут же нет Comparsion. выполняется нативное сравнение, так вот это и нечестно :) Не понял тебя. Тут и не должно быть Comparsion, мы же сравниваем Sort(Comparsion) vs OrderBy(). Сравнение честное. hVosttи да, тут не делегат, а Expression. вещи совершенно разные. i => i - это сокращенная запись делегата, учите матчасть, товарещ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:41 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
Код: c# 1. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:42 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУi => i - это сокращенная запись делегата, учите матчасть, товарещ :) нет. не путай лямбда-выражение Expression и делегат Func/Action записанный с использованием лямбда-подставновки аргументов. ето ещё кому надо матчасть учить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:43 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, разницу чувствуешь между Expression<Func<TSource, TKey>> и Func<TSource, TKey> ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:45 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУi => i - это сокращенная запись делегата, учите матчасть, товарещ :) нет. не путай лямбда-выражение Expression и делегат Func/Action записанный с использованием лямбда-подставновки аргументов. ето ещё кому надо матчасть учить :) Жжете, батенька :) Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:47 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУ, разницу чувствуешь между Expression<Func<TSource, TKey>> и Func<TSource, TKey> ? Чувствую. И? В обоих случаях используется делегат :) P.S. Хвост, не позорься, хватит. Стыдно же будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:47 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVostt, милок, ты меня решил основам LINQ подучить? А пупок не развяжется? P.S. Всё, кончай балаган. У нас тема другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 10:49 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
Даже википедия знает о делегатах :) http://ru.wikipedia.org/wiki/Лямбда-выражения Лямбда-выражение (в программировании) — это специальный синтаксис для объявления анонимных делегатов по месту их использования. Используя лямбда-выражения, можно объявлять функции в любом месте кода. Обычно лямбда-выражение допускает замыкание на лексический контекст, в котором это выражение использовано. То есть лямбда OrderBy(i => i) есть ни что иное, как делегат. Собственно, это вытекает даже из определения Код: c# 1. И никакими тут Expression не пахнет даже. Expression<Func> используется в классе Queryable реализациях и никакого отношения к теме не имеет. И тем не менее, даже в этом случае скомпилированное дерево использует указатель на метод (делегат). Хвост, когда перестанешь спорить с тем, с чем не до конца разобрался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 11:25 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, да погоди ты. много ты знаешь о том, как компилятор работает. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 11:34 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУЧувствую. И? В обоих случаях используется делегат :) нет: 1. a => a.Field 2. a => a.Field1 + a.Field2 во втором случае обычный Func будет делегатом, а в случае Expression Будет 2 узла и 1 операция, никаких делегатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 11:37 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУ, да погоди ты. много ты знаешь о том, как компилятор работает. LINQ родной для .NET, и делегат он легко переводит в Expression. можешь в рефлекторе глянуть. особенно такие вещи i => i, он сравнивает i, не адресуя вызов анонимному делегату (который вообще не создаётся , ни строчки кода). Отрой документацию, хватит уже фантазировать Лямбда выражение не обязательно должно строиться с помощью Expression, прекращай писать глупости. Когда лямбда-выражение назначается переменной с типом Expression<TDelegate> , компилятор выдает код для создания дерева выражений, представляющего лямбда-выражение. Компиляция деревьев выражений: тип Expression<TDelegate> предоставляет метод Compile , который компилирует код, представляемый деревом выражений, в исполняемый делегат. Таким образом в конечном итоге у нас будет не Expression, как ты пишешь, а делегат . Заруби это на носу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 11:49 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
hVosttМСУЧувствую. И? В обоих случаях используется делегат :) нет: 1. a => a.Field 2. a => a.Field1 + a.Field2 во втором случае обычный Func будет делегатом, а в случае Expression Будет 2 узла и 1 операция, никаких делегатов. Мля, клоунада продолжается 1. "Обычный" Func не "будет делегатом", это и есть делегат )) 2. Как собирается Expression, я тебе написал выше. Он собирается в конечном итоге тоже в делегат )) P.S. Учи матчасть, не зли меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 11:51 |
|
||
|
Сортировка List<class>
|
|||
|---|---|---|---|
|
#18+
МСУ, ладно, ладно... убедил. чертяка красноречивый. П.С. и всё-таки она вертится! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2013, 12:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=18&tid=1357929]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 411ms |

| 0 / 0 |
