【问题标题】:Sorting of array returned by a NSFileManager's subpathsAtPath: methodNSFileManager 的 subpathsAtPath: 方法返回的数组排序
【发布时间】:2013-10-31 20:56:59
【问题描述】:

[[NSFileManager defaultManager] subpathsAtPath:storagePath] 返回一个字符串数组,表示“storagePath”中所有项目的路径。在我的测试中,这个数组看起来总是按文件名按字母顺序排序,但在文档中我找不到任何告诉我这种排序得到保证的东西。如果我知道数组已排序,我可以更有效地搜索它。

有人知道这个数组是否保证排序?

【问题讨论】:

  • 如果没有记录,则不能保证。

标签: ios file sorting nsfilemanager


【解决方案1】:

试试这样的:

NSMutableArray* fetchResults = [[NSFileManager defaultManager] subpathsAtPath:storagePath];
[fetchResults sortUsingComparator:^NSComparisonResult(NSString* a, NSString* b){
    NSString* a1 = [a lastPathComponent];
    NSString* b1 = [b lastPathComponent];
    return [a1 localizedCaseInsensitiveCompare b1];
    }
];

当一切都以字母顺序开始时,这种排序会运行得相当快,这意味着您可以放心,您将始终拥有所需的字母顺序,而不会浪费太多 CPU 周期来获取它。

【讨论】:

  • 这几乎就是我正在做的事情哈哈。不过我希望能够跳过这个,因为这似乎是浪费工作。
  • 您的怀疑是正确的,需要按字母顺序排列的保证。由于您没有从文档中获得它,因此通过使用这样的比较器进行排序,您最终得到了您想要的结果。此外,如果结果已经按字母顺序排列,则该块将恰好通过数组一次(每个比较结果都只会说“好,继续”),这可能需要的时间可以忽略不计。在我看来,要严格满足您对保证字母顺序的合理怀疑要求,付出的代价似乎很小。
  • 我也重新阅读了 NSFileManager 类引用,但也无法保证结果会被排序。您也可以考虑使用返回 NSURL 的方法(如 contentsOfDirectoryAtURL:includePropertiesForKeys:options:error:),因为与简单的文件路径字符串相比,您有更多方便的方法和挂钩
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2013-02-21
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多