バージョン番号の文字列を比較する方法
Objective-Cではバージョンの文字列の比較は NSString の compare:options: メソッドに NSNumericSearch を指定して行います。
NSString *versionA = @"1.0.0"; NSString *versionB = @"1.41.0"; if ([versionA compare:versionB options:NSNumericSearch] == NSOrderedAscending) { // 昇順(NSOrderedAscending、versionA < versionB)のとき NSLog(@"昇順"); } else { NSLog(@"昇順で無い"); }
さまざまなパターンの値を指定したときの結果を以下にまとめました。
[versionA compare:versionB options:NSNumericSearch];
と記述したときの versionA と versionB の値の並び順を NSOrderedSame,NSOrderedAscending,NSOrderedDescending のいずれかで返します。
ちょっと日本人には直感的ではないのでNSOrderedSame=等しい、NSOrderedAscending=昇順、NSOrderedDescending=降順として記述しました。
versionA | versionB | 比較結果 |
---|---|---|
1.0.0 | 1.41.0 | 昇順 |
2.0.0 | 1.41.0 | 降順 |
1.0 | 1.41.0 | 昇順 |
2.0 | 1.41.0 | 降順 |
1 | 1.41.0 | 昇順 |
2 | 1.41.0 | 降順 |
1.5.0 | 1.41.0 | 昇順 |
1.50.0 | 1.41.0 | 降順 |
1.4.0 | 1.41.0 | 昇順 |
1.41.0 | 1.41.0 | 等しい |
1.40.99 | 1.41.0 | 昇順 |
1.4.99 | 1.41.0 | 昇順 |
0.99.99 | 1.41.0 | 昇順 |
この様にどの様なパターンで記述されたバージョン番号のときでも理想的な結果が返されます。