Ios 在NSMutableArray中捕获默认排序?
我有一个NSMutableArray,其中包含从CloudKit检索到的对象。最初,我不做任何排序,所以它使用检索记录的任何排序顺序。在一些用户交互中,我需要为特定目的对其进行排序。但是,我希望能够撤消排序并返回默认顺序。但是由于初始排序不是我指定的,我想知道是否有一种方法可以捕获初始排序顺序?我查看了NSMutableArray和NSSortDescriptor的文档,没有看到任何可以调用的方法。是否有一种内置的方式是我所缺少的,或者是否有人有一种定制的方式来做到这一点?Ios 在NSMutableArray中捕获默认排序?,ios,objective-c,nsmutablearray,nssortdescriptor,Ios,Objective C,Nsmutablearray,Nssortdescriptor,我有一个NSMutableArray,其中包含从CloudKit检索到的对象。最初,我不做任何排序,所以它使用检索记录的任何排序顺序。在一些用户交互中,我需要为特定目的对其进行排序。但是,我希望能够撤消排序并返回默认顺序。但是由于初始排序不是我指定的,我想知道是否有一种方法可以捕获初始排序顺序?我查看了NSMutableArray和NSSortDescriptor的文档,没有看到任何可以调用的方法。是否有一种内置的方式是我所缺少的,或者是否有人有一种定制的方式来做到这一点? 谢谢 AFAIK,N
谢谢 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];
另外,
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];
另外,
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];
另外,
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];
您应该从一些已知的、合理的排序顺序开始。为什么要从一些未知的随机顺序开始?我可能会,但现在我对从CloudKit检索的顺序没有意见。你应该从一些已知的、正常的排序顺序开始。为什么要从一些未知的随机顺序开始?我可能会,但现在我对从CloudKit检索的顺序没有意见。你应该从一些已知的、正常的排序顺序开始。为什么要从一些未知的随机顺序开始?我可能会,但现在我对从CloudKit检索的顺序没有意见。你应该从一些已知的、正常的排序顺序开始。为什么要从一些未知的随机顺序开始呢?我可能会,但现在我对从CloudKit检索到的顺序没有意见。谢谢。我已经想到了这一点,但正在尝试避免重复数据,即创建另一个数组来仅使用已排序的数据,反之亦然。似乎有一种方法可以捕获当前的排序,从而保存它,这是有道理的。但是如果没有,我可能不得不同意你的建议。@SonnyB-这里的方法不是“复制数据”,而是创建第二个数组,它引用与原始数组完全相同的数据(即对象)。除非您有一个非常大的数组,否则第二个容器的开销不太可能成为问题。将第二个数组看作是对相同数据的排序视图。好的观点……是的,我知道内存/性能的差异可能可以忽略不计,但我想我是在尽量精简它。谢谢谢谢我已经想到了这一点,但正在尝试避免重复数据,即创建另一个数组来仅使用已排序的数据,反之亦然。似乎有一种方法可以捕获当前的排序,从而保存它,这是有道理的。但是如果没有,我可能不得不同意你的建议。@SonnyB-这里的方法不是“复制数据”,而是创建第二个数组,它引用与原始数组完全相同的数据(即对象)。除非您有一个非常大的数组,否则第二个容器的开销不太可能成为问题。将第二个数组看作是对相同数据的排序视图。好的观点……是的,我知道内存/性能的差异可能可以忽略不计,但我想我是在尽量精简它。谢谢谢谢我已经想到了这一点,但正在尝试避免重复数据,即创建另一个数组来仅使用已排序的数据,反之亦然。似乎有一种方法可以捕获当前的排序,从而保存它,这是有道理的。但是如果没有,我可能不得不同意你的建议。@SonnyB-这里的方法不是“复制数据”,而是创建第二个数组,它引用与原始数组完全相同的数据(即对象)。除非您有一个非常大的数组,否则第二个容器的开销不太可能成为问题。将第二个数组看作是对相同数据的排序视图。好的观点……是的,我知道内存/性能的差异可能可以忽略不计,但我想我是在尽量精简它。