|
|
|||||||||||||||||||||
.NET 4.x Быстрейший способ отделить число от букв13.09.2024, 13:11. Показов 9815. Ответов 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 | |
|
Строка: Есть ли способ одной строкой менять несколько букв? Как преобразовать строку, удалив в ней группы цифр, а группы букв отделить пробелами. Упорядочить полученную последовательность слов Сумма кодов первой и последней букв: способ разрешения коллизий Бинарное дерево Подсчитать число гласных и согласных букв в множестве и определить, каких букв больше Перед каждой группой одинаковых букв, вставить число, соответствующее количеству букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|