|
|
|||||||||||||||||||||
.NET 4.x Быстрейший способ отделить число от букв13.09.2024, 13:11. Показов 9629. Ответов 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 | |
|
Строка: Есть ли способ одной строкой менять несколько букв? Как преобразовать строку, удалив в ней группы цифр, а группы букв отделить пробелами. Упорядочить полученную последовательность слов Сумма кодов первой и последней букв: способ разрешения коллизий Бинарное дерево Подсчитать число гласных и согласных букв в множестве и определить, каких букв больше Перед каждой группой одинаковых букв, вставить число, соответствующее количеству букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|