|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
Осваиваю C#. Про Linq не успел еще книжек почитать, нагуглить не смог. Пример кода Код: 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.
В реале из файла читается таблица, затем содается сортированный (по value) массив (key, value, other). Дальше надо сделать много выборок по конкретным значениям value. Массив отсортирован по value, но как об этом сообщить Linq? Затестил время (SIZE = 1000 - 90 мс, 4000 - 1280 мс), т.е. сложность алгоритма получается O(n^2). Т.е. тупо перебор. Можно конечно переписать на BinarySearch(), но может как-то можно с помощью Linq порешать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 18:44 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
Linq не хранит данные. Linq работает только с IEnumerable. Поэтому естественно будет тупо перебор. Такшта.... оптимизировать вручную. В данном случае, почему бы не захэшировать выражение (i % 1000).ToString() и в HashTable его. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 18:49 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
Shocker.ProВ данном случае, почему бы не захэшировать выражение (i % 1000).ToString() и в HashTable его. Загнал в HashTable, а как выбрать? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Погуглил, не нашел ответов. Как правильно запрос написать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 20:16 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
Dima T, дык у вас и заполенение хештаблицы не должно произойти ибо Add((i % 1000).ToString(), new Row(i.ToString(), (i % 1000).ToString())); ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 20:42 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
дубликат ключа, не майтесь, распаралеьте выборку - AsParallel процентов 30-40 будет в плюсе ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 20:44 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
Dima T, замена желтых строк на код ниже дает заметное ускорение: Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 01:26 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
И еще. Советую использовать int вместо Int32 и string вместо String. Это избавляет от необходимости писать using и выделяет данные типы при подсветке синтакисиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 01:28 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
Dima T, а с использованием Lookup еще быстрее. По сути это то что советовал Shocker.Pro. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 02:47 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
С Lookup значительно ускорилось. SIZE = 4000 за 1 мс отрабатывает. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 05:35 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
bazileИ еще. Советую использовать int вместо Int32 и string вместо String. Рихтер с вами не согласен: The C# language specification states, “As a matter of style, use of the keyword is favored over use of the complete system type name.” I disagree with the language specification; I prefer to use the FCL type names and completely avoid the primitive type names. In fact, I wish that compilers didn’t even offer the primitive type names and forced developers to use the FCL type names instead. Here are my reasons: ... (далее см. примечания к главе "Programming Language Primitive Types" раздела "Primitive, Reference, and Value Types"). Не то бы что я всецело разделяю его точку зрения - просто как пример, что здесь "не всё так однозначно". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 06:01 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, я знаком с данной точкой зрения и не разделяю её. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 06:29 |
|
Как-то можно сообщить Linq что масив отсортирован?
|
|||
---|---|---|---|
#18+
bazileИ еще. Советую использовать int вместо Int32 и string вместо String. Это избавляет от необходимости писать using и выделяет данные типы при подсветке синтакисиса. ИМХУ на вкус и цвет... По мне так Int32 лучше смотрится чем int. Так в коде меньше слов отвлекающих внимание. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 07:24 |
|
|
start [/forum/topic.php?fid=20&fpage=73&tid=1401048]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 145ms |
0 / 0 |