強火で進め

このブログではプログラム関連の記事を中心に書いてます。

バージョン番号の文字列を比較する方法

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 昇順

この様にどの様なパターンで記述されたバージョン番号のときでも理想的な結果が返されます。