|
|
|||||||||||||||||||||
.NET 4.x Быстрейший способ отделить число от букв13.09.2024, 13:11. Показов 9609. Ответов 117
Метки нет (Все метки)
Всем привет.
Есть строки такого вида:
Необходимо наиболее быстро распарсить их. Из строк видно, что они могут быть с четырьмя знаками после запятой, и в этом случае не содержат пробела между числом и строкой, и с тремя знаками, но уже с пробелом между ними. Сначала первый вариант (без пробела) я парсил так:
@"^\d+\.\d+\s{1}m?V$"Затем сделал "общий" Regex для обоих этих случаев: @"^\d+\.\d+\s?m?V$"и теперь их значения достаю вот так:
На простом коде сложно определить, т.к. разница незначительна, но вдруг случится "что-то", что намного затормозит этот процесс с Regex'ом? Т.е. не поменял ли я шило на мыло?
1
|
|||||||||||||||||||||
| 13.09.2024, 13:11 | |
|
Ответы с готовыми решениями:
117
Автомобильные номера состоят из 1,2, или 3 букв и 4 цифр. используется 30 букв, найти число таких букв отделить крупное число от мелкого |
|
|
||||
| 13.09.2024, 19:24 [ТС] | ||||
|
Иными словами: если метод уже "приготовился" что-то делать, то он "на горячую" будет делать это быстро. А если этот же метод по каждой строке вызывать и инициировать снова, то будут совсем другие результаты. Но я уже на реальной установке проверил - VB-шный метод Conversion.Val(s) выстегивает все предыдущие. 0мс в среднем из 1к переданных строк..
0
|
||||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
||||
| 13.09.2024, 19:46 | ||||
|
0
|
||||
|
|
||
| 13.09.2024, 19:54 [ТС] | ||
|
Переходить на тесты в тиках ЦП смысла особого нет, т.к. 0,1,2...10 мс уже отличный результат. Вообще, я сперва решал вопрос Regex VS StringBuilder, и как бы ответил сам себе - они практически равны (оказались).Добавлено через 1 минуту mashmed135, еще стоит учитывать то, что само определение входного шаблона вычитывает шарповый Regex. А на это тоже время тратится, хоть и довольно малое.
0
|
||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
|||
| 13.09.2024, 20:09 | |||
|
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||||||||
| 14.09.2024, 10:04 | ||||||||||||||||||||||
Сообщение было отмечено wizard41 как решение
Решение
Получается вот так:
Я проверил, double.Parse() сам кушает пробелы, так что selected_unit и string_pos можно убрать и сделать только одну переменную, которая и позицию в строке укажет и индекс в массиве volts_units:
1
|
||||||||||||||||||||||
|
|
||||||
| 14.09.2024, 12:07 [ТС] | ||||||
|
belalugoci, ни чего так:
Benchmark
0
|
||||||
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 14.09.2024, 13:06 | ||
|
0
|
||
|
|
||
| 14.09.2024, 13:29 [ТС] | ||
|
Правда особого сокращения времени не произошло: все так же ~500 нс. Добавлено через 14 минут я б даже сказал - разницы нет. Исходную строку все равно перебирать посимвольно. Ну, в хэшсете поиск немногим быстрее, конечно.
0
|
||
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
|||||||||||
| 14.09.2024, 14:09 | |||||||||||
Сообщение было отмечено wizard41 как решение
Решение
wizard41, на своем железе проверьте вот этот метод:
Можно пропускать пробел (если он есть) и избавиться от метода Trim(). Хотя возможно он инлайнится, кто знает. Добавлено через 1 минуту Интуитивно кажется, что на части инструкций можно сэкономить, избавившись от Trim().
0
|
|||||||||||
|
|
|||||||
| 14.09.2024, 14:17 [ТС] | |||||||
|
IamRain, ну по одной отдельной строке время в среднем такое же.
У меня то идет "прогон" по всему массиву, а там 4 входных строки. Надо переписать немного код бенча.. Добавлено через 1 минуту Добавлено через 5 минут IamRain, если брать на круг, то:
Результаты улучшились.. ) Явно за счет ReadOnlySpan<char>
0
|
|||||||
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
|||||||||||
| 14.09.2024, 14:30 | |||||||||||
|
Вот эти два:
У belalugoci пока быстрее всего.
0
|
|||||||||||
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
|||||||||||
| 14.09.2024, 14:45 | |||||||||||
|
Хм, думал, если строки передавать как строки, а не как span-ы, то будет быстрее (избавляемся от копирования структуры), однако получилось дольше на четверть.
За последний прогон ParseToPair2 оказался самый быстрый (из моих вариантов). Кликните здесь для просмотра всего текста
1
|
|||||||||||
|
|
|
| 14.09.2024, 15:12 [ТС] | |
|
IamRain, да все, хорош "ускорений". Были сомнения, что первый метод излишне напрягается, но по факту оказалось что он работает всего 0,04% времени от всего выделенного окна.
Дольше ожидается другой await, вслед за ним..
1
|
|
| 14.09.2024, 15:12 | |
|
Строка: Есть ли способ одной строкой менять несколько букв? Как преобразовать строку, удалив в ней группы цифр, а группы букв отделить пробелами. Упорядочить полученную последовательность слов Сумма кодов первой и последней букв: способ разрешения коллизий Бинарное дерево Подсчитать число гласных и согласных букв в множестве и определить, каких букв больше Перед каждой группой одинаковых букв, вставить число, соответствующее количеству букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|