|
|
|||||||||||||||||||||
.NET 4.x Быстрейший способ отделить число от букв13.09.2024, 13:11. Показов 9023. Ответов 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 букв, найти число таких букв отделить крупное число от мелкого |
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 969
|
||||||
| 13.09.2024, 13:23 | ||||||
если даблы будут в специфичном формате, то может будет быстрее работать если сделать свой посимвольный разбор на си, конвертировав ее в ascci?
0
|
||||||
|
|
|||
| 13.09.2024, 13:30 [ТС] | |||
|
Тут скорее вопрос в том - на сколько выгоднее (или нет) применить Regex.. Добавлено через 1 минуту
0
|
|||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 969
|
|||
| 13.09.2024, 13:41 | |||
|
0
|
|||
|
|
||
| 13.09.2024, 13:50 [ТС] | ||
|
На самом деле, при реальной работе этого кода проблем пока не возникало (выборка и обработка происходит каждые 70-100 мс), но мне кажется, таким образом система через чур "напрягается", когда можно это сделать более проще и быстрее.. Ну и вдруг, время между обработками сократиться, то не возникнет ли эффекта пропусков.. Добавлено через 4 минуты P.S. тем более что, все равно соответствие строк данному формату определяется именно Regex'ом. Поэтому, тут можно прямо из самой проверки сразу выдергивать эти значения с помощью Group[x]... (наверное)
0
|
||
|
Администратор
|
||
| 13.09.2024, 13:55 | ||
|
0
|
||
|
|
|||||||||||
| 13.09.2024, 14:13 [ТС] | |||||||||||
|
tezaurismosis, согласен, но это не единственная операция, которая выполняется за время "окна", поэтому обработка должна быть насколько возможно короче.
Добавлено через 7 минут Чуть изменил код - результаты стали: 21мс (цикл с StringBuilder) против 3мс через Regex!
Ой, вернее наоборот! Добавлено через 1 минуту Regex намного медленнее получился, чем цикл со StringBuilder().
0
|
|||||||||||
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,565
|
||
| 13.09.2024, 14:44 | ||
|
0
|
||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 969
|
||
| 13.09.2024, 15:00 | ||
|
0
|
||
|
Администратор
|
|
| 13.09.2024, 15:57 | |
|
0
|
|
|
|
||||
| 13.09.2024, 16:26 [ТС] | ||||
|
Добавлено через 10 минут golosalex, кстати, по поводу HashSet - он для отсеивания дублей хорош, а в данном случае его примение под вопросом. Например, на строке 1.99 V он вторую девятку "забракует" и она не войдет в результат.По поводу статистики на больших входных коллекциях - ну тоже не особый вариант, ведь здесь важна именно единичная обработка, т.к. входные данные приходят не кучей, а по отдельности. Т.е. важно время обработки одной строчки.
0
|
||||
|
fly
4946 / 4629 / 843
Регистрация: 13.04.2015
Сообщений: 9,810
|
||
| 13.09.2024, 17:01 | ||
Сообщение было отмечено wizard41 как решение
Решение
1
|
||
|
|
||
| 13.09.2024, 17:28 [ТС] | ||
![]() Добавлено через 2 минуты Хотя, само измерение сделано неправильно для всех случаев. Добавлено через 9 минут С предварительным "прогревом" метод из VisualBasic самый быстрый, стремится к 0 мс.Остальные два ~2мс.
0
|
||
|
3259 / 3277 / 556
Регистрация: 17.02.2019
Сообщений: 5,185
|
||
| 13.09.2024, 17:29 | ||
|
Или там целая часть может и 2-х значная быть?
0
|
||
|
|
|||
| 13.09.2024, 17:38 [ТС] | |||
|
Добавлено через 3 минуты В общем, надо делать нормальный бенч, т.к. при перестановке Regex и StringBuilder методов - первый становится быстрее..
0
|
|||
|
|
||||||
| 13.09.2024, 17:59 [ТС] | ||||||
|
Вариант VisualBasic
Conversion.Val(s) однозначно работает быстрее варианта double.Parse(), даже с вычленением единиц измерения через Regex:
0
|
||||||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
|
| 13.09.2024, 18:46 | |
|
запускать бэнч на паре значений(да ещё и с io) это прям сильно. ещё и мерить это всё в "секундах". ещё и значения получать в районе погрешности. + дебаг сборка - в общем, полный комплект.
хочешь замерить - бэнчи в несколько проходов на паре гигов данных хотя бы. данные нагенерить и влинковать отдельно(хотя может в шарпе так нельзя - тогда из файлика предварительно считать целиком). нужен перф(хотя бы уровня шарпа) - юзай либо регеспы, либо какие-то функции из стдлибы. 95% это будет быстрее кода на скриптухе. Добавлено через 1 минуту либо на сишке писать как выше кто-то сказал. правда толку от этого - входной формат слишком мусор. но авось, если уж совсем припрёт.
0
|
|
|
91 / 58 / 14
Регистрация: 16.11.2018
Сообщений: 274
|
|
| 13.09.2024, 19:03 | |
|
Есть подозрение что в ассемблере там тока мов и рет ...
т.е. для константных значений компилятор размотал цикл и вычислил все на этапе компиляции.
0
|
|
|
|
|||||
| 13.09.2024, 19:09 [ТС] | |||||
|
Добавлено через 1 минуту
0
|
|||||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
|||||
| 13.09.2024, 19:16 | |||||
|
Добавлено через 1 минуту если бэнч адекватный надумаешь писать - запости сюда потом код и результаты. интересно как шарп себя здесь поведёт.
0
|
|||||
| 13.09.2024, 19:16 | |
|
Помогаю со студенческими работами здесь
20
Строка: Есть ли способ одной строкой менять несколько букв? Как преобразовать строку, удалив в ней группы цифр, а группы букв отделить пробелами. Упорядочить полученную последовательность слов Сумма кодов первой и последней букв: способ разрешения коллизий Бинарное дерево Подсчитать число гласных и согласных букв в множестве и определить, каких букв больше Перед каждой группой одинаковых букв, вставить число, соответствующее количеству букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|