|
|
|||||||||||||||||||||
.NET 4.x Быстрейший способ отделить число от букв13.09.2024, 13:11. Показов 9230. Ответов 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
Сообщений: 973
|
||||||
| 13.09.2024, 13:23 | ||||||
если даблы будут в специфичном формате, то может будет быстрее работать если сделать свой посимвольный разбор на си, конвертировав ее в ascci?
0
|
||||||
|
|
|||
| 13.09.2024, 13:30 [ТС] | |||
|
Тут скорее вопрос в том - на сколько выгоднее (или нет) применить Regex.. Добавлено через 1 минуту
0
|
|||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 973
|
|||
| 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
|
|||||||||||
|
2395 / 1925 / 763
Регистрация: 27.07.2012
Сообщений: 5,569
|
||
| 13.09.2024, 14:44 | ||
|
0
|
||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 973
|
||
| 13.09.2024, 15:00 | ||
|
0
|
||
|
Администратор
|
|
| 13.09.2024, 15:57 | |
|
0
|
|
|
|
||||
| 13.09.2024, 16:26 [ТС] | ||||
|
Добавлено через 10 минут golosalex, кстати, по поводу HashSet - он для отсеивания дублей хорош, а в данном случае его примение под вопросом. Например, на строке 1.99 V он вторую девятку "забракует" и она не войдет в результат.По поводу статистики на больших входных коллекциях - ну тоже не особый вариант, ведь здесь важна именно единичная обработка, т.к. входные данные приходят не кучей, а по отдельности. Т.е. важно время обработки одной строчки.
0
|
||||
|
dive
4969 / 4664 / 847
Регистрация: 13.04.2015
Сообщений: 9,862
|
||
| 13.09.2024, 17:01 | ||
Сообщение было отмечено wizard41 как решение
Решение
1
|
||
|
|
||
| 13.09.2024, 17:28 [ТС] | ||
![]() Добавлено через 2 минуты Хотя, само измерение сделано неправильно для всех случаев. Добавлено через 9 минут С предварительным "прогревом" метод из VisualBasic самый быстрый, стремится к 0 мс.Остальные два ~2мс.
0
|
||
|
3260 / 3306 / 556
Регистрация: 17.02.2019
Сообщений: 5,200
|
||
| 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
|
|
|
92 / 59 / 14
Регистрация: 16.11.2018
Сообщений: 275
|
|
| 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
Строка: Есть ли способ одной строкой менять несколько букв? Как преобразовать строку, удалив в ней группы цифр, а группы букв отделить пробелами. Упорядочить полученную последовательность слов Сумма кодов первой и последней букв: способ разрешения коллизий Бинарное дерево Подсчитать число гласных и согласных букв в множестве и определить, каких букв больше Перед каждой группой одинаковых букв, вставить число, соответствующее количеству букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|