3

ファイル B、C、A を含むフォルダーがあります。これは、次の操作を行ったときに表示される順序です。

    NSFileManager *filemgr;
    NSArray *filelist;
    int count;
    int i;

    filemgr =[NSFileManager defaultManager];
    filelist = [filemgr contentsOfDirectoryAtPath:myPathHere error:NULL];
    count = [filelist count];

    for (i = 0; i < count; i++)
    {

       NSLog(@"File %@ is at index: %d", [filelist objectAtIndex: i], i);

    }

A、B、C などの文字列の配列の順序に一致するようにファイルを並べ替えるにはどうすればよいですか?

使用する必要がありますsortUsingDescriptorsか?

4

3 に答える 3

1

これを試してみてください - パスを NSURL としてトラバースし、次のNSURLLocalizedNameKeyプロパティを使用します。

NSFileManager *manager = [NSFileManager defaultManager];
NSArray *fileList = [manager contentsOfDirectoryAtURL:[NSURL fileURLWithPath:oneDir.path]
                        includingPropertiesForKeys:[NSArray arrayWithObject: NSURLFileResourceIdentifierKey]
                                           options:nil
                                             error:nil];

for (NSURL *f in fileList) {
    NSString *name = nil;
    if ([f getResourceValue:&name forKey:NSURLLocalizedNameKey error:nil]) {
        NSLog(@"%@",name);
    }
}
于 2013-05-31T21:53:24.653 に答える
1

文字のリスト(単一の文字列)の順序で意味すると仮定しますが、これもより複雑になる可能性があります。

  • 文字列 (文字) の包括的な配列を構築します。"Ca" と "C" がある場合は、前者を最初にする必要があります。

  • 文字列で辞書を作成します。文字列がキーであり、配列内の順序を表す NSNumber をオブジェクトとして使用します。

  • プレフィックス文字列を指定して別の辞書を作成し、最初の辞書の各キーが確実に見つかるようにするために必要な最長の一致を返します

ここで、ファイルのリストを取得すると、次のようになります。

  • ファイル名の最初の文字をキーとして使用して、最初の検索で使用する最大文字数を取得します。

  • それらの文字を取得し、最初の辞書で一致を探します。見つからない場合は、一致するまで文字列の長さを 1 つずつ減らします。これで、このファイル名の順序がわかります。ファイル名をキーとして、その順序を表す NSNumber をオブジェクトとして、新しい辞書に追加します。

  • この新しい辞書からすべての値の配列を取得し、NSNumber の値に基づいて並べ替えます。破棄する必要がある重複があります。

  • 指定された値を持つディクショナリ オブジェクトを繰り返し取得します。他の基準に基づいてさらに並べ替えたい場合があります

したがって、最初に母音で始まり、次に他の文字で始まるファイル名が必要であると判断できます。したがって、最初の配列は「A」、「E」、「I」、「O」、「U」、「Y」、「B」、...

于 2013-05-31T21:53:38.187 に答える
1

これは文字列の配列でなければならないので、文字列を並べ替えます

NSArray * sortedStrings = [filelist sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
于 2013-05-31T22:04:29.943 に答える