2013-09-03 3 views
6

Как сравнить две строки номера версии?Сравнение двух номеров версий

Например: 3.1.1 и 3.1.2.5.4

Теперь нужно выяснить, если 3.1.2.5.4 выше, чем 3.1.1, но я не знаю, как это сделать. Может ли кто-нибудь мне помочь?

Заранее благодарен!

+0

http://stackoverflow.com/questions/7004655/comparing-strings-with-the-format-2-0- 1-2-0-09 – satheeshwaran

+0

Возможный дубликат [сравнить номера версий в объективе c] (http://stackoverflow.com/questions/1978456/compare-version-numbers-in-objective-c) – Amar

ответ

8

Пример кода:

NSString* v1 = @"3.1.1"; 
NSString* v2 = @"3.1.2.5.4"; 

if ([v1 compare:v2 options:NSNumericSearch] == NSOrderedDescending) { 
    NSLog(@"%@ is greater than %@",v1,v2); 
} 

Из документации Apple, для Comparing and sorting strings.

+1

спасибо. работает как шарм! – AmiiQo

+3

Кронштейн: не работает, если он заканчивается на '.0', а другой нет, например. '@" 3.1 "и' @ "3.1.0" '. Сплит-решения (см. Ответ @ pArAs) или отступы могут справиться с этим. – CRD

+1

Это правда. Но проверка версий может быть утомительной. Проверьте мою категорию NSString, которая ловит все гранивые случаи на github; https://github.com/stijnster/NSString-compareToVersion '[@" 1.2.2.4 "compareToVersion: @" 1.2.2.5 "];' – Stijnster

2

Да, вы можете сравнить версии, пожалуйста, обратитесь код ниже:

public class Comparision { 

    string ver1, ver2; 
    public static void main(String args[]){ 
    string ver1Split[] = ver1.split('.'); 
    string ver2Split[] = ver2.split('.'); 

    for (int i = 0; i < ver1Split.length; ++i) { 
     if (ver2Split == i) { 
      return ver1 + " is larger"; 
     } 

     if (ver1Split[i] == ver2Split[i]) { 
      continue; 
     } 
     else if (ver1Split[i] > ver1Split[i]) { 
      return ver1 + " is larger"; 
     } 
     else { 
      return ver2 + " is larger"; 
     } 
     if (ver1Split.length != ver2Split.length) { 
      return ver2 + " is larger"; 
     } 
     return "versions are equal"; 
    } 
} 
+0

вы можете инициализировать строковые переменные ver1 и ver2, указав фактические номера версий. – Paras

+0

ваш тоже работает, но решение Vin проще для моих конкретных потребностей. Но тем не менее спасибо! – AmiiQo

Смежные вопросы