【问题标题】:How can one sort an NSMutableArray of NSMutableArrays containing NSStrings?如何对包含 NSStrings 的 NSMutableArrays 的 NSMutableArray 进行排序?
【发布时间】:2009-07-09 11:38:22
【问题描述】:

有没有一种简单的方法可以对包含 NSStrings 的 NSMutableArrays 的 NSMutableArray 进行排序?

我确信一定有一个简单的方法可以做到这一点,但我似乎找不到它。

为了澄清,我想按子数组索引 3 处的 NSString 按字母顺序对第一个数组进行排序。

【问题讨论】:

  • 你对外部数组的排序标准是什么?
  • 首先,您必须定义排序顺序的外观。哪个数组先出现?具有更多条目的条目还是包含将首先排序的字符串的条目?

标签: objective-c arrays sorting nsmutablearray


【解决方案1】:

除了“使用这个功能,弄清楚”之外,没有看到任何人真正回答这个问题。所以这里有一些你可以使用的实际代码。

将此类别放在 .h 文件的末尾(或任何地方,然后将 .h 导入您需要排序的任何地方)

@interface NSString (SortCompare)

-(NSInteger)stringCompare:(NSString *)str2;

@end

将其放入 .m 文件(或您要导入的 .h 的 .m)中

@implementation NSString (SortCompare)

-(NSInteger) stringCompare:(NSString *)str2
{
    return [(NSString *)self localizedCaseInsensitiveCompare:str2];
}

@end

现在通过在数组上调用 sortUsingSelector: 来使用排序
NSMutableArray:

[myArray sortUsingSelector:@selector(stringCompare:)];

NSArray:

[myArray sortedArrayUsingSelector:@selector(stringCompare:)];

【讨论】:

    【解决方案2】:

    如果您的 NSMutableArray 仅包含 NSString 类型的对象,只需执行以下操作:

    [myMutableArray sortUsingSelector:@selector(compare:)];
    

    【讨论】:

      【解决方案3】:

      正如其他人所提到的,NSArray 没有允许它自行排序的compare: 选择器,因此您必须自己定义它。我会使用名为compare:(NSArray *)otherArray 的方法在 NSArray 上创建一个类别(或者更好地描述它的功能),并将其与sortUsingSelector: 一起使用。

      根据您的需要,您可以在需要对它们进行排序时将所有字符串填充到一个大数组中,然后改用它。编写的代码可能会少一些。

      【讨论】:

      • 通过类别向 NSArray 添加像 compare: 这样的泛型方法似乎有点危险——最好添加一个唯一命名的选择器,或者更好的是,使用带有比较函数的 sortUsingFunction。跨度>
      【解决方案4】:

      您可以通过以下方式按键排序:

      NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:NO];
      [yourArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-08
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 2010-10-22
        相关资源
        最近更新 更多