![]() 7 / 7 / 0
Регистрация: 07.09.2019
Сообщений: 207
|
||||||
Сортировка массива08.01.2025, 23:43. Показов 1420. Ответов 20
Метки нет Все метки)
(
Доброго времени уважаемые форумчане.Подскажите как отсортировать одномерный массив в нормальном порядке.При обычном добавлении в массив сортируется так как на изображении.Отсортировать через
0
|
08.01.2025, 23:43 | |
Ответы с готовыми решениями:
20
Сортировка массива
Сортировка массива |
Администратор
![]() ![]() |
|
09.01.2025, 11:59 | |
![]() Решение
Strannik_san, с точки зрения строк это и есть нормальный порядок
![]()
1
|
![]() |
||||||||||||||||
09.01.2025, 16:26 | ||||||||||||||||
Вот сортировщик для строк с числами. На VB.NET переведите сами
Strannik_san, Использование в LINQ
0
|
Администратор
![]() ![]() |
|
09.01.2025, 17:11 | |
0
|
![]() |
|
09.01.2025, 17:13 | |
0
|
Администратор
![]() ![]() |
|
09.01.2025, 21:19 | |
Затем что начальное условие было
Если x Является GPReport И y Является GPReport . Мы его инвертировали чтобы выбросить ArgumentException. Значит по правилам булевской логики условие превращается в Если x НеЯвляется GPReport ИЛИ y НеЯвляется GPReport . Правильность этого утверждения мы можем проверить на практике. Что будет если в метод Compare передадут GPReport и string. Мы ожидаем ArgumentException, но получим NullReferenceException.Более интересный вопрос зачем мы тут используем IComparer, а не IComparer<GPReport>? В таком случае вопросы про неверные типы просто бы отпали.
0
|
![]() 7 / 7 / 0
Регистрация: 07.09.2019
Сообщений: 207
|
|
09.01.2025, 21:48 [ТС] | |
OwenGlendower, спасибо за ответ.А не подскажете как сделать свой сортировщик на основе моего изображения со второго примера что вы указали тему.Не совсем понимаю как правильно это реализовать.Так как количество файлов будет 5300 штук.
Добавлено через 2 минуты Andrey-MSK, спасибо за ответ,но писать столько кода для сортировки массива в программе у которой код меньше чем сама сортировка это слишком. ![]()
0
|
Администратор
![]() ![]() |
||||||
09.01.2025, 21:52 | ||||||
![]() Решение
У вас Windows же? Тогда возьмите код класса Comparer отсюда. Тогда сортировку можно будет сделать так:
3
|
![]() |
|||||||||||
10.01.2025, 08:30 | |||||||||||
Потому что используется это там, где нужно просто IComparer, и конечная точка не принимает типизированный сортировщик. Вот где это применяется, тут не GPReport, но суть таже
![]()
0
|
Администратор
![]() ![]() |
|||||||||||
10.01.2025, 10:43 | |||||||||||
Окей, но у ТС же нет таких ограничений.
Если бы он еще память более бережно использовал. Набросал простой бенчмарк чтобы сравнить его с пакетом NaturalSort.Extension. Получил такой результат:
Кликните здесь для просмотра всего текста
1
|
Администратор
![]() ![]() |
||||||||||||||||
10.01.2025, 18:59 | ||||||||||||||||
Удалось переписать код так чтобы он не делал выделений памяти. Код написан под .NET Framework. В .NET вместо ToLong следует применить long.Parse принимающий ReadOnlySpan<char>. Код проверил поверхностно. Надеюсь там нет багов
![]()
NaturalStringComparer2
Бенчмарк
2
|
Администратор
![]() ![]() |
||||||
13.01.2025, 19:11 | ||||||
Strannik_san, я перевел свой код созданный на основе кода Andrey-MSK на Visual Basic .NET и выложил его в тему с примерами. Возможно вам будет интересно.
Также я сделал бенчмарк (в аттачменте) для сравнения старого и новых вариантов сортировщика. Мой вариант обозначен как NSC2.
2
|
![]() |
||||||
14.01.2025, 09:22 | ||||||
Это не мой код
![]() Нашел баг. Вот смотрите. Первоначальный вариант, обратите внимание на положение чертежа под номером 0000-HH А вот ваш вариант Позиция записи сместилась. Перевёл ваш код с VB на C# так
1
|
Администратор
![]() ![]() |
|
14.01.2025, 09:56 | |
Да, вижу. Можете скинуть строки текстом?
Окей. Это ничего не меняет. Так или иначе код необходимо улучшить.
1
|
![]() |
|
14.01.2025, 10:13 | |
1
|
![]() |
|
14.01.2025, 15:33 | |
OwenGlendower, Прогнал оба варианта в Debug. Ваш вариант в сравнении этого набора символов возвращает 1, а первоначальный -1, так как он продолжает разбор строки с символами до конца, а где после символа начинаются числа - останавливается и в итоге строке с числами уходит вверх.
Вот ваш вариант Вот первоначальный
1
|
Администратор
![]() ![]() |
|
14.01.2025, 15:58 | |
Я тоже уже немного подебажил и нашел один баг. Вместо Math.Min нужно использовать Math.Max. Тогда для строк "0000-03" и "0000-HH" оба варианта вернут -1.
2
|
![]() |
||||||
14.01.2025, 16:21 | ||||||
Да, вы правы, исправил
![]()
0
|
![]() |
|
14.01.2025, 16:31 | |
0
|
14.01.2025, 16:31 | ||||||
Помогаю со студенческими работами здесь
20
Сортировка массива
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|