|
|
|||||||||||||||||||||
.NET 4.x Быстрейший способ отделить число от букв13.09.2024, 13:11. Показов 9792. Ответов 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 | |
|
Строка: Есть ли способ одной строкой менять несколько букв? Как преобразовать строку, удалив в ней группы цифр, а группы букв отделить пробелами. Упорядочить полученную последовательность слов Сумма кодов первой и последней букв: способ разрешения коллизий Бинарное дерево Подсчитать число гласных и согласных букв в множестве и определить, каких букв больше Перед каждой группой одинаковых букв, вставить число, соответствующее количеству букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|