Jak mogę porównać dwa ciągi numerów wersji?Porównanie dwóch numerów wersji
Na przykład: 3.1.1 i 3.1.2.5.4
Teraz muszę się dowiedzieć, czy 3.1.2.5.4 jest wyższa niż 3.1.1, ale nie wiem jak to zrobić. Czy ktoś może mi pomóc?
Z góry dziękuję!
Jak mogę porównać dwa ciągi numerów wersji?Porównanie dwóch numerów wersji
Na przykład: 3.1.1 i 3.1.2.5.4
Teraz muszę się dowiedzieć, czy 3.1.2.5.4 jest wyższa niż 3.1.1, ale nie wiem jak to zrobić. Czy ktoś może mi pomóc?
Z góry dziękuję!
Przykładowy kod:
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);
}
z dokumentacji firmy Apple Comparing and sorting strings.
dzięki. działa jak marzenie! – AmiiQo
Krawędź krawędzi: nie działa, jeśli kończy się na '.0', a druga nie, np. '@" 3.1 "' i '@" 3.1.0 "'. Rozdzielone rozwiązania (patrz odpowiedź @ pArAs) lub dopełnienie mogą sobie z tym poradzić. – CRD
To prawda. Ale sprawdzanie wersji może być uciążliwe. Sprawdź moją kategorię NSString, która przechwytuje wszystkie skrajne przypadki na githubie; https://github.com/stijnster/NSString-compareToVersion '[@" 1.2.2.4 "compareToVersion: @" 1.2.2.5 "];' – Stijnster
Tak, można porównać wersje, patrz poniższy kod:
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";
}
}
http://stackoverflow.com/questions/7004655/comparing-strings-with-the-format-2-0- 1-2-0-09 – satheeshwaran
możliwy duplikat [porównaj numery wersji w obiektywnym c] (http://stackoverflow.com/questions/1978456/compare-version-numbers-in-objective-c) – Amar