我可以使用选择器(就地)按子字符串对 NSString 的 NSMutable 数组进行排序吗?

发布于 2024-12-11 04:50:23 字数 448 浏览 0 评论 0原文

我有一个由 NSString 组成的 NSMutableArray 。当我需要对其进行排序时,我使用 [array sortUsingSelector:@selector(caseInsensitiveCompare:)] 效果非常好。

但有时我需要按 NSString 的子字符串对数组进行排序。在这种情况下,子字符串被定义为跟随某个标记的 NSString 的一部分。由于标记在每个字符串中的位置可以不同,因此事情变得更加复杂。

显然,我可以将 NSString 分成 2 个对象并对它们进行排序,但这需要进行重大更改。

有没有一种方法可以使用类似于我上面描述的选择器进行排序?

我想如果没有,那么我可能会通过创建数组的排序副本(而不是使用选择器就地执行)进行排序,然后释放原始数组。

I have a NSMutableArray consisting out of NSStrings. When I need to sort it, I use [array sortUsingSelector:@selector(caseInsensitiveCompare:)] which works perfect.

But sometimes I need to sort the array by substrings of NSStrings. The substring is defined in this case as part of NSString following some marker. The thing is complicated further by the fact that marker can be positioned differently in every string.

Obviously I can break NSString into 2 objects and do sorting on them but it will require significant changes.

Is there a way to do the sorting using selector similar to what I have described above?

I think if not, then I might sort by creating a sorted copy of an array (instead of using selector to do it in place), then releasing the original.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不乱于心 2024-12-18 04:50:23

您可以使用 NSMutableArray 的 sortWithOptions:usingComparator

[myMutableArray sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(NSString* str1, NSString* str2) {

    // Scan for your marker in both strings and split on it...
    // Say you store the results in substr1 and substr2...
    return [substr1 caseInsensitiveCompare:substr2];
}];

You can perform any arbitrarily complex sorting inline with NSMutableArray's sortWithOptions:usingComparator:

[myMutableArray sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(NSString* str1, NSString* str2) {

    // Scan for your marker in both strings and split on it...
    // Say you store the results in substr1 and substr2...
    return [substr1 caseInsensitiveCompare:substr2];
}];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文