0

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

这是我写的代码:

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

问题是它sortedArrayUsingComparator返回一个 NSArray 而不是 NSMutableArray,并且我在运行时收到此代码的警告和问题。
有没有办法将 NSArray 转换为 NSMutableArray?还是我必须复制所有元素?最后一个解决方案很昂贵:有人可以提出一个好的、低开销的解决方案吗?

4

1 回答 1

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];
于 2012-05-20T14:31:32.110 回答