Ищете алгоритм или подход для сравнения значений двух строк (.NET)

У меня проблема с фрагментом данных в виде строки, и мне нужно проверить, существуют ли данные в указанных диапазонах.

Обратите внимание: если оба конца являются числами, сравнение не является обычным сравнением чисел. См. примеры ниже:

  • Низкий-"9958", Высокий-"99585" -> Следующие значения находятся в диапазоне-> "9958", "99580", "99581", "99582", "99583", "99584", "99585".
  • Низкий-"30789", Высокий-"310100" -> Значения в диапазоне = "30789", "30790" до "310100"
  • Низкий — «81190», Высокий — «81190ZZ» -> Значения от «81190» до «81190A» и «81190AA». Затем, по сути, все комбинации алфавитов, такие как «81190B», «81190C», «81190AB» и «81190ZZ».

Надеюсь, это помогло. Я изо всех сил пытаюсь выяснить, является ли этот вид сравнения известным типом и существуют ли решения, которые я могу использовать.

Если я не очень хорошо объясняю это должным образом, не стесняйтесь, дайте мне знать. Я рад предоставить больше примеров

Редактировать На случай, если у кого-то возникнет подобная проблема, я нашел RangeTree для хранения значений high-low и сравнения входящих данных.

Высказывали ли вы какие-либо мысли о возможном решении

Maytham Fahmi 04.08.2024 22:19

Почему в первом примере нет 9959 или 99580?

OneCricketeer 04.08.2024 22:25

отредактировал вопрос, так как «99580» находится в первом диапазоне. «9959» или, казалось бы, промежуточное число, например 86344, находится вне диапазона.

Kalyan Krishna 04.08.2024 22:31

@MaythamFahmi, я могу определить диапазон, но надеялся избежать изобретения велосипеда. Владелец бизнеса уверен, что это какое-то стандартное сравнение строк.

Kalyan Krishna 04.08.2024 22:33

ок, правильно ли это во втором примере High-"3101"

Maytham Fahmi 04.08.2024 22:35

стандартная сортировка строк, похоже, будет работать. Попытался ли ты?

topsail 04.08.2024 22:36

@topsail, если можно, расскажи подробнее.

Kalyan Krishna 04.08.2024 22:44

Ваш вопрос в его нынешнем виде содержит несколько примеров и просит нас вывести из него шаблон И предоставить алгоритм для этого шаблона. Но именно вы должны определить, какой шаблон вам нужен, иначе с нашей стороны это будут лишь догадки, а вы отвергнете все наши неверные догадки. Поэтому, пожалуйста, опишите шаблон, который вы собираетесь реализовать, простыми словами. Это поможет нам, а главное, вам понять, в чем состоит задача. И как только мы с вами поймем, в чем заключается задача, скорее всего, это будет решаемый вопрос.

Lajos Arpad 04.08.2024 23:43

Является ли «Низкий-»30789», Высокий-«310100» -> Значения в диапазоне = «30789», «30790» до «31000»» опечаткой? Почему самое высокое значение будет 31000, а не 310100?

phuzi 04.08.2024 23:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это основная программа для консольного приложения .NET, которая использует сравнение строк .NET по умолчанию для ваших тестовых данных:

internal class Program
{
    static void Main(string[] args)
    {
        var lo = "9958";
        var hi = "99585";
        var strings = new List<string>{ "9958", "99581", "99585" };
        CheckIt(lo, hi, strings);

        lo = "30789";
        hi = "310100";
        strings = new List<string>{ "30789", "30790", "31000" };
        CheckIt(lo, hi, strings);
        
        lo = "81190";
        hi = "81190ZZ";
        strings = new List<string>{ "81190", "81190A", "81190AA", "81190B", "81190C", "81190AB", "81190ZZ" };
        CheckIt(lo, hi, strings);
    }

    static void CheckIt(string lo, string hi, List<string> strings)
    {
        foreach(var s in strings)
        {
            Console.WriteLine($"{s} >= {lo} <= {hi}: {s.CompareTo(lo) >= 0 && s.CompareTo(hi) <= 0}");
        }
    }
}

Все выходы True. Конечно, вы могли бы написать более качественный тестовый код и, возможно, использовать подход модульного тестирования, но это простой пример для начала.

Примечание: хотя это может показаться тривиальной темой, я надеюсь, что сортировка строк — это то, над чем все разработчики размышляли и исследовали в течение нескольких часов на каком-то этапе своего обучения. Например, вы должны знать, почему «1» может сортироваться раньше «10» при сортировке как строка или стоит ли «а» перед «А». Как только вы поймете это достаточно хорошо, многие другие вещи обретут смысл (и на ум приходят другие хорошие вопросы, например, предшествует ли буква с акцентом в испанском языке букве без акцента...?)

это действительно оно. спасибо, что нашли время объяснить. Сравнение строки по диапазону в SQL Server — еще одно похожее (не точное) объяснение этой проблемы.

Kalyan Krishna 05.08.2024 01:34

А как насчет 995812 или 9958XY для первого диапазона, 30789A или 30B для второго, 8119012 для последнего? Я предполагаю, что должна быть проверка не короче, чем более короткая граница, не длиннее, чем более длинная, и для разных длин «класс символов» каждой позиции за пределами длины более короткой границы соответствует классу в более длинной.

greybeard 05.08.2024 07:22

Другие вопросы по теме

Похожие вопросы

Определить, удален ли управляемый объект
Blazor EditForm: кнопка отключения приводит к тому, что все нетронутые поля помечаются как недействительные
.NET 8: MemoryCache SlidingExpiration без доступа
Изменение цвета фона панели задач на прозрачный через Win32 API или реестр в Windows 11
Проблема развертывания Blazor WASM Core в Azure
Netwonsoft JsonConvert.Deserialization выдает исключение JsonSerializationException: «Ошибка преобразования значения «Имя моего пользовательского объекта» в тип «System.Type»
Как обеспечить автоматическое масштабирование для CollectionView в объекте Popup из CommunityToolkit.Maui после его заполнения с помощью события нажатия кнопки на платформе Windows?
«Попытка чтения или записи защищенной памяти. Часто это признак того, что другая память повреждена». В программе на C#
Перемещение видеофайла из хранилища BLOB-объектов Azure на сайт Sharepoint на C#
Стратегия обработки нескольких миграций EF