|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
Если из коллекции сделан IOrderedEnumerable, и в дальнейшем коллекция не изменяется, то упорядочивание элементов (формирование IOrderedEnumerable) будет производиться каждый раз при вызове foreach или как-то запоминается, что коллекция неизменна и IOrderedEnumerable не меняется? Т.е. Код: c# 1. 2. 3. 4. 5. 6. 7.
Т.е. вопрос в производительности и внутренней реализации. Или сортировка сделана один раз, до тех пор, пока коллекция не изменяется или каждый раз при вызове foreach? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2019, 20:32 |
|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
Warning! Possible multiple enumeration of IEnumerable ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2019, 20:52 |
|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
Если взять код примера отсюда , слегка модифицировать и запустить один раз с result = myIntegers.OrderBy(i => i), второй с result = myIntegers.OrderBy(i => i).ToArray() Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
то станет понятным, что сортировка производится каждый foreach (для IOrderedEnumerable). Поэтому, как вариант избавиться от повторной сортировки - ToArray(). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 00:16 |
|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
с IEnumerable так вообще лучше не делать, не гарантировано, что можно будет проитерировать эту последовательность дважды или результаты не окажутся разными ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 01:06 |
|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
LR Поэтому, как вариант избавиться от повторной сортировки - ToArray(). Спасибо. Хотя Майкрософт не гарантирует порядок в словаре, сейчас, вероятно, можно так сделать, т.к. пока, насколько выяснил, реализация словаря такова, что его сортировка не меняется. Но если программа пишется на длительную эксплуатацию, то так делать нельзя: раз порядок не гарантирован, то его сбой может начаться в будущих фреймворках. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 02:27 |
|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
Вакан LR Поэтому, как вариант избавиться от повторной сортировки - ToArray(). Спасибо. Хотя Майкрософт не гарантирует порядок в словаре, сейчас, вероятно, можно так сделать, т.к. пока, насколько выяснил, реализация словаря такова, что его сортировка не меняется. Но если программа пишется на длительную эксплуатацию, то так делать нельзя: раз порядок не гарантирован, то его сбой может начаться в будущих фреймворках. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 03:13 |
|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
Вакан Или сортировка сделана один раз, до тех пор, пока коллекция не изменяется или каждый раз при вызове foreach? Строго говоря, при вызове Код: c# 1.
сортировка вообще не сделана, т.к. результат возврата - IEnumerable, и какие-либо действия в таком случае всегда будут отложенными, т.е. выполняться при итерации. Вышеприведенное вполне можно записать как Код: c# 1.
- в такой записи несколько более явно видно, что повторный вызов заново произведет некие действия (т.к. OrderByDescending - это не метод экземпляра Dictionary, а extension-метод), и вернёт новый экзепляр IEnumerable. Ну, и соответственно, сортировка тоже будет проведена повторно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 07:33 |
|
Если сделан IOrderedEnumerable, будет ли каждый раз производиться сортировка при foreach?
|
|||
---|---|---|---|
#18+
Roman Mejtes настоятельно рекомендую вам ознакомиться с тем, как устроен алгоритм справочников, причем тут упорядоченность не совсем понятно. и в каком виде они там хранятся. Это не бинарное дерево и элементы в справочнике не упорядочены B отвечал не про ToArray, а про ToDictionary. Ваш ответ не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 12:01 |
|
|
start [/forum/topic.php?fid=20&fpage=14&tid=1398719]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 144ms |
0 / 0 |