1

「file1.format」、「file2.format」などのカスタム命名を使用して、アプリを介してドキュメントディレクトリにいくつかのファイルを保存しています。後でこれらのファイルを配列でフェッチし、ループで印刷すると、ソートされますフォームですが、「file10.format」などを保存すると問題が発生します。この後、予想外の結果がもたらされます。10番目のファイルを保存した後、出力は次のようになります

file1.format file10.format file2.format . . file6.format file61.format file7.format 上記のように、並べ替えですべての 1 または 2 が 1 つの場所に表示される理由がわかりませんが、10 は 1 の後ではなく 9 の後に来るはずです。結果は常に同じです。

4

3 に答える 3

2

「Finderのように」ファイル名を並べ替える場合は、を使用しますlocalizedStandardCompare。特に、文字列内の数値は数値に従ってソートされます。

NSArray *files = [NSArray arrayWithObjects:@"file10.format", @"file2.format", @"file1.format", nil];
NSArray *sorted = [files sortedArrayUsingSelector:@selector(localizedStandardCompare:)];
NSLog(@"%@", sorted);

出力:

2012-11-05 11:38:55.474 test77[533:403] (
    "file1.format",
    "file2.format",
    "file10.format"
)
于 2012-11-05T10:47:47.620 に答える
1

通常の文字列の並べ替え順序を使用する場合は、ファイルの名前を変更することを検討する必要があります。file00001.formatfile00002.formatなど。その場合はfile00010.format次のようfile00009.formatになりますfile00011.format

于 2012-11-05T10:20:25.697 に答える
0

実際に正しく動作しています。

file10.format

前に来る

file2.format 

その文字0は、比較対象の文字よりも小さいと見なされるためです.(両方の文字は、それぞれのファイル名で同じ場所にあります。

実際、昔、若者が派手なグラフィカル オペレーティング システムを使用する前は、ファイルシステムもこのようにファイルを並べ替えていました。</老人の暴言>

于 2012-11-05T10:14:35.193 に答える