Сравнить номера версий без использования функции split

Как сравнить номера версий?

Например:

x = 1.23.56.1487.5

y = 1,24,55,487,2

Можете ли вы использовать class версии?

http://msdn.microsoft.com/en-us/library/system.version.aspx

Он имеет интерфейс IComparable. Помните, что это не будет работать с версией из 5 частей, как показано на рисунке (это действительно ваша строка версии?). Предполагая, что ваши входы являются строками, вот рабочий пример с обычной версией версии .NET 4-part:

 static class Program { static void Main() { string v1 = "1.23.56.1487"; string v2 = "1.24.55.487"; var version1 = new Version(v1); var version2 = new Version(v2); var result = version1.CompareTo(version2); if (result > 0) Console.WriteLine("version1 is greater"); else if (result < 0) Console.WriteLine("version2 is greater"); else Console.WriteLine("versions are equal"); return; } } 

Если вы можете жить с помощью схемы major.minor.build.revision, вы можете использовать class .Net Version . В противном случае вам придется реализовать какой-то синтаксический анализ слева направо и продолжить до тех пор, пока не получите разницу или не верните, что две версии равны.

 public int compareVersion(string Version1,string Version2) { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"([\d]+)"); System.Text.RegularExpressions.MatchCollection m1 = regex.Matches(Version1); System.Text.RegularExpressions.MatchCollection m2 = regex.Matches(Version2); int min = Math.Min(m1.Count,m2.Count); for(int i=0; iConvert.ToInt32(m2[i].Value)) { return 1; } if(Convert.ToInt32(m1[i].Value) 

В дополнение к ответу @JohnD может потребоваться сравнить только частичные номера версий, не используя Split (‘.’) Или другую строку <-> int change bloat. Я только что написал метод расширения CompareTo с 1 дополнительным аргументом – количество значимых частей номера версии для сравнения (между 1 и 4).

 public static class VersionExtensions { public static int CompareTo(this Version version, Version otherVersion, int significantParts) { if(version == null) { throw new ArgumentNullException("version"); } if(otherVersion == null) { return 1; } if(version.Major != otherVersion.Major && significantParts >= 1) if(version.Major > otherVersion.Major) return 1; else return -1; if(version.Minor != otherVersion.Minor && significantParts >= 2) if(version.Minor > otherVersion.Minor) return 1; else return -1; if(version.Build != otherVersion.Build && significantParts >= 3) if(version.Build > otherVersion.Build) return 1; else return -1; if(version.Revision != otherVersion.Revision && significantParts >= 4) if(version.Revision > otherVersion.Revision) return 1; else return -1; return 0; } } 
  • Форматировать строку Go без печати?
  • Как передать переменные из awk в команду оболочки?
  • Байт Java-массива с массивом строк в байт
  • Равная высота элементов внутри элемента сетки с раскладкой сетки CSS
  • Строка макроопределения
  • Regex, как совместить необязательный символ
  • Как использовать «.» Как разделитель с String.split () в java
  • Длина значения длины строки в mongoDB
  • Лучший способ заменить многие строки - обфускация в C #
  • Получить переменную по имени из строки
  • Как получить часть файла после строки, которая соответствует выражению grep? (первое совпадение)
  • Давайте будем гением компьютера.