- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用 localizedStandardCompare 对包含 NSURL 的 NSMutableArray 进行排序:
[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *f1 = [(NSURL *)obj1 absoluteString];
NSString *f2 = [(NSURL *)obj2 absoluteString];
return [f1 localizedStandardCompare:f2];
}];
这工作得很好,但我有点担心性能:在排序过程中该 block 将被评估 n log n 次,所以我希望它能够很快(数组可能最多有 100,000 个元素)。由于 localizedStandardCompare 仅适用于 NSString,因此我需要将 URL 转换为字符串。上面,我使用了absoluteString,但是还有其他返回NSString的方法,例如relativeString。阅读 NSURL 类引用,我得到的印象是,relativeString 可能更快,因为 URL 不需要解析,但这是我第一次使用 Cocoa 和 OS-X,因此只是一个疯狂的猜测。
附加约束:在这种情况下,所有 URL 都来自本地存储上的 NSDirectoryEnumerator,因此都是文件 URL。不过,如果该方法适用于所有类型的 URL,那就太好了。
我的问题:我应该使用哪种方法将 NSURL 转换为 NSString 以获得最佳性能?
分析所有可能的方法也许是可能的,但我只有一台(相当快的)OS-X 机器,谁知道呢 - 有一天代码可能最终会出现在 iOS 上。
我在 OS-X 10.8.2 上使用 Xcode 4.5.2,但该程序也应该在旧版本上运行(在合理范围内)。
最佳答案
您可能需要使用Carbon的FSCatalogSearch,它比NSDirectoryEnumerator更快。至于走哪条路,我认为别无选择。
为了加快排序速度,您唯一可以考虑的是对路径进行部分排序,因为文件系统将按字母顺序返回同一文件夹的所有文件。
因此您可能想要获取同一目录的所有路径并将它们与其他结果合并。
例如,主页内容可能是:
ab1.txt
bb.txt
c.txt
文档目录可能包含:
adf.txt
fgh.txt
因此,您只需使用自定义算法将它们合并,该算法仅应用合并排序的合并部分。
关于objective-c - 使用 localizedStandardCompare 对 NSURL 进行排序的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224863/
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selec
我正在使用 localizedStandardCompare: 对数组进行排序,这使我能够以正确的本地化顺序排序对象。现在我想在 UITableView 的 index 中使用它们,这意味着我需要生成
我需要使用 localizedStandardCompare 对包含 NSURL 的 NSMutableArray 进行排序: [array sortUsingComparator:^NSCompar
使用这个(内存排序)时排序顺序有区别吗 [[UILocalizedIndexedCollation currentCollation] sortedArrayFromArray:namesArray
我有一位用户声称我的 Core Data 应用程序不会在他的 Mac 上保存数据。即使使用完全相同的配置,我也无法重现该问题。 我可以获得的所有信息是我的应用程序记录到用户控制台的消息(见下文)。也许
我是一名优秀的程序员,十分优秀!