2

我已将 NSString 标记为 NSMutable 数组。然后,我可以使用 NSSortDescriptor 按字符串的长度对该数组进行排序。然后我可以从最长的单词开始对某些单词执行方法。

这就是我的问题出现的地方。我现在需要恢复数组的原始排序顺序,以便可以将数组运行回已编辑的字符串。

4

2 回答 2

2

我的回答基本上和史蒂夫的回答一样,只是我会用另一种方式来做——保留原始数组,创建一个排序后的副本,逐步完成排序后的副本进行处理,然后将其丢弃。所以,例如

NSArray *yourOriginalArray = ...whatever...;

// do processing
for(id object in [yourOriginalArray sortedArrayUsing<whatever means>])
{
    // if you're doing processing that doesn't change the identity of
    // the object then there's no need to worry about this, but supposing
    // you want to adjust the identity (eg, the source array is full of
    // immutable objects and you want to replace them) then...

    NSUInteger originalIndex = [yourOriginalArray indexOfObject:object];

    id replacementObject = [self mutatedFormOf:object];
    [yourOriginalArray replaceObjectAtIndex:originalIndex
                     withObject:replacementObject];
    // of course, this is only if yourOriginalArray is mutable
}
于 2012-04-21T02:26:52.707 回答
2

NSMutableArray 对它的先前状态一无所知,只知道它的当前状态。可能有更优雅的解决方案,但您可以做的一件事是创建另一个存储原始排序顺序的数组。

于 2012-04-21T01:29:46.677 回答