Пользователь вводит данные типа 4.0.9
У меня есть список таких чисел в файле 4.0.8, 4.0.9, 4.0.10
и т.д. В этом случае я должен выбрать 4.0.9 из этих трех.
Но если файл содержит как 4.0.8, 4.0.9+, 4.0.10
тогда мне нужно скопировать и 4.0.9
и 4.0.10
.
Также, если он имеет 4.0.8, 4.0.9, 4.0.10+
тогда мне нужно скопировать только 4.0.9
Я пытался с регулярным выражением в С#, но не для всех тестовых случаев. Любая идея, как реализовать эту логику или любую встроенную функцию?
Если я правильно понимаю ваши требования, вы можете записать его следующим образом. Предполагая, что у вас есть list
версий (unsorted), вы можете разобрать его в списке помощников. Обратите внимание, что я дополнительно сортирую версии из list
, чтобы сделать логику более ясной:
string list = "4.0.8, 4.0.9+, 4.0.10";
var versions =
list.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new
{
Version = Version.Parse(s.TrimEnd('+')),
FutureReleases = s.EndsWith("+")
})
.OrderBy(a => a.Version);
Затем просто перебирайте его при подборе определенного input
:
string input = "4.0.9";
var version = Version.Parse(input);
var output = versions.SkipWhile(a => a.Version < version);
var first = output.FirstOrDefault();
if (first != null && !first.FutureReleases)
{
output = versions.TakeWhile(a => a.Version == version);
}
Здесь мы просто опускаем более низкую версию и принимаем одну версию (если +
не указана) или все выше (дополнительно +
).