捕获 NSMutableArray 中的默认排序?
Capture default sorting in NSMutableArray?
我有一个 NSMutableArray,其中包含从 CloudKit 检索到的对象。最初,我没有进行任何排序,所以它使用检索到的记录的任何排序顺序。有一些用户交互,我需要根据特定目的对其进行排序。但是,我希望能够撤消排序并返回到默认顺序。但是由于初始排序不是我指定的,我想知道是否有办法捕获初始排序顺序?我查看了 NSMutableArray 和 NSSortDescriptor 的文档,但没有看到任何可以调用的方法。是否有我缺少的内置方式,或者是否有人有自定义方式来执行此操作?
谢谢!
AFAIK,NSArray
(因此 NSMutableArray
)没有任何特殊的默认排序。他们的顺序就是最开始添加的顺序对象。
NSArray *arr1 = @[@1, @2, @3];
NSLog(@"%@", arr1); // (1, 2, 3)
NSArray *arr2 = @[@3, @1, @2];
NSLog(@"%@", arr2); // (3, 1, 2)
您的问题的一个解决方案是存储初始数组,当用户想要对其进行排序时,您复制初始数组,对其进行排序并将其显示给用户,同时保留原始数组。如果用户想要撤消它,您只需显示原始数组并删除已排序的副本。
这是非常基本的伪代码:
NSMutableArray *originalArray = [self arrayFromCloudKit]; // fetch from CloudKit
// now the user wants it sorted alphabetically
NSMutableArray *alphabeticallySorted = originalArray.mutableCopy
[alphabeticallySortedsortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
[self storeOriginalArray:originalArray];
[self displayUIWithArray:alphabeticallySorted];
// but if the user changes their mind, you just fetch the original and delete the sorted
NSMutableArray *originalArray = [self getOriginalArray];
[self displayUIWithArray:originalArray];
我有一个 NSMutableArray,其中包含从 CloudKit 检索到的对象。最初,我没有进行任何排序,所以它使用检索到的记录的任何排序顺序。有一些用户交互,我需要根据特定目的对其进行排序。但是,我希望能够撤消排序并返回到默认顺序。但是由于初始排序不是我指定的,我想知道是否有办法捕获初始排序顺序?我查看了 NSMutableArray 和 NSSortDescriptor 的文档,但没有看到任何可以调用的方法。是否有我缺少的内置方式,或者是否有人有自定义方式来执行此操作? 谢谢!
AFAIK,NSArray
(因此 NSMutableArray
)没有任何特殊的默认排序。他们的顺序就是最开始添加的顺序对象。
NSArray *arr1 = @[@1, @2, @3];
NSLog(@"%@", arr1); // (1, 2, 3)
NSArray *arr2 = @[@3, @1, @2];
NSLog(@"%@", arr2); // (3, 1, 2)
您的问题的一个解决方案是存储初始数组,当用户想要对其进行排序时,您复制初始数组,对其进行排序并将其显示给用户,同时保留原始数组。如果用户想要撤消它,您只需显示原始数组并删除已排序的副本。
这是非常基本的伪代码:
NSMutableArray *originalArray = [self arrayFromCloudKit]; // fetch from CloudKit
// now the user wants it sorted alphabetically
NSMutableArray *alphabeticallySorted = originalArray.mutableCopy
[alphabeticallySortedsortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
[self storeOriginalArray:originalArray];
[self displayUIWithArray:alphabeticallySorted];
// but if the user changes their mind, you just fetch the original and delete the sorted
NSMutableArray *originalArray = [self getOriginalArray];
[self displayUIWithArray:originalArray];