使用块比较NSMutableArray

时间:2012-05-20 14:21:50

标签: objective-c nsmutablearray nsarray

我有NSMutableArray* names,其中包含NSStrings。我想用caseInsensitiveCompare方法对数组进行排序。

这是我写的代码:

names= [names sortedArrayUsingComparator: ^ NSComparisonResult (id obj1, id obj2)
            {
                return [obj1 caseInsensitiveCompare: obj2];
            }];

问题是sortedArrayUsingComparator返回NSArray而不是NSMutableArray,我在运行时使用此代码收到警告和问题。
有没有办法将NSArray强制转换为NSMutableArray?或者我是否必须复制所有元素?最后一个解决方案很昂贵:有人会建议一个不错的低开销解决方案吗?

1 个答案:

答案 0 :(得分:1)

请注意,您正在使用的函数的名称(sortedArrayUsingComparator)告诉您它将返回一个数组而不是一个可变数组。使用NSArray的mutableCopy方法获取可变副本。

names= [[names sortedArrayUsingComparator: ^ NSComparisonResult (id obj1, id obj2)
       {
           return [obj1 caseInsensitiveCompare: obj2];
       } ] mutableCopy];

或者,更容易阅读/关注:

NSArray *namesArray = [names sortedArrayUsingComparator:^NSComparisonResult (id obj1, id obj2) {
       return [obj1 caseInsensitiveCompare: obj2];
       }];
names = [namesArray mutableCopy];