|
|
|||||||||||||||||||||
.NET 4.x Быстрейший способ отделить число от букв13.09.2024, 13:11. Показов 9775. Ответов 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 букв, найти число таких букв отделить крупное число от мелкого |
|
|
||||||||
| 19.09.2024, 13:26 [ТС] | ||||||||
![]() Добавлено через 4 минуты
0
|
||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 19.09.2024, 13:43 | |||
|
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 19.09.2024, 13:50 | |||
|
Добавлено через 48 секунд
0
|
|||
|
|
||||||
| 19.09.2024, 14:12 [ТС] | ||||||
0
|
||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 19.09.2024, 14:46 | |
|
wizard41, хм, что-то не работает у меня ни мой вариант ни January29
на мои пишет Specified argument was out of the range of valid values. The input string '1.5225mV' was not in a correct format. The input string '1.526 mV' was not in a correct format. Specified argument was out of the range of valid values. на January29 The input string 'V' was not in a correct format. The input string 'mV' was not in a correct format. The input string 'mV' was not in a correct format. The input string 'V' was not in a correct format. при том что без бенча всё работает.
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 19.09.2024, 15:17 | ||||||
|
wizard41, так же.
в общем пока запустил без бенча и ошибка в January29_Method System.FormatException: "The input string 'V' was not in a correct format." для строки return (double.Parse(value), unit);
wizard41, в общем моему методу нужно скармливать числа с запятыми, а January29_Method ни так ни так не работает.
0
|
||||||
|
|
|||||||
| 19.09.2024, 15:20 [ТС] | |||||||
|
belalugoci, попутано местами. Должно быть так:
double.Parse добавить параметр CultureInfo.InvariantCulture
0
|
|||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 19.09.2024, 15:28 | ||||||
|
wizard41,
на моей машине, парсер в моем методе стандартный, ничего нового не добавлял еще, метод такой же как и был ранее, даже немного хуже наверное, я пробелы лишним while убираю.
просто я залип на это так как не верю что LINQ будет быстрее обычного кода.
0
|
||||||
|
|
||
| 19.09.2024, 15:34 [ТС] | ||
|
Обычный код тоже можно "наворотить" так, что linq покажется ракетой.. Учитывая то, что в нем самом (условно) все методы "оптимизированы" до нельзя.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 19.09.2024, 15:37 | |
|
wizard41, это да, но я скорее о том, что вызов и работа
str.Where(char.IsLetter), str.IndexOf(unit)).TrimEnd() и double.Parse достаточно просты, но при этом напичканы кучей перевызовов и параметров, в итоге вместо N итерацией мы получаем 3*N на пустом месте. BigO не поменялся, а скорость страдает.
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 19.09.2024, 15:42 | |
|
wizard41, кстати какой возможный диапазон значений может быть? Например может быть 8437732.87235V или 0.0000000000564563563mV?
0
|
|
| 19.09.2024, 15:47 | |
|
0
|
|
| 19.09.2024, 19:13 | |
|
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
| 21.09.2024, 03:49 | ||||||||||||||||
|
wizard41,
Parse_Custom это моя попытка сделать свой парсер. Она провалилась, нашел ошибки, исправил, и скорость выглядит убручающе. ParseNew - это новописанный мой метод, но с парсингом double.Parse() и с обрезкой пробелов "руками" ParseNew2 - это новописанный мой метод, но с парсингом double.Parse() и без обрезки пробелов "руками"
0
|
||||||||||||||||
|
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
|
||||||||||||||||||||||
| 21.09.2024, 18:47 | ||||||||||||||||||||||
FastParser, время парсинга 1 строки: Debug: 90 нс Release: 78 нс FastParser2, время парсинга 1 строки: Debug: 47 нс Release: 31 нс FastParser3, время парсинга 1 строки: Debug: 17 нс Release: 5 нс Во втором и третьем парсинг происходит руками, выкинуты по максимуму все вычисления + не используется арифметический сопроцессор. В третьем единицы измерения указываются как enum, а не string, что ускоряет код в 6 раз (!). Просто создание объекта string - операция, мягко говоря, небыстрая. В целом, там есть куда дальше копать, варьируя между универсальностью и скоростью, а также тому, насколько часто значения повторяются, и какие вообще их варианты есть, а также какие есть варианты единиц измерений. Чем меньше вариантов - тем больше можно ускорить код, снижая его универсальность. FastParser:
1
|
||||||||||||||||||||||
| 21.09.2024, 18:47 | |
|
Строка: Есть ли способ одной строкой менять несколько букв? Как преобразовать строку, удалив в ней группы цифр, а группы букв отделить пробелами. Упорядочить полученную последовательность слов Сумма кодов первой и последней букв: способ разрешения коллизий Бинарное дерево Подсчитать число гласных и согласных букв в множестве и определить, каких букв больше Перед каждой группой одинаковых букв, вставить число, соответствующее количеству букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|