2012-09-18 98 views
0

这是我的情况:排序多个阵列

我操纵6个NSMutableArrays。其中一个有NSDate的对象,其他的有NSNumber s。当我填充它们时,我为它们中的每一个使用了addObject:,因此每个数组的索引0包含date数组中索引为0的所有我想要的值。

我想确保数组都按照日期数组排序(按日期排序,升序排列),这意味着在排序期间,如果日期数组的第5行移动到第1行,它必须也可以应用于所有其他阵列。

以前使用CoreData,但我必须不再使用它(请不要问为什么,这是题外话;))。在CoreData,我可以用一个NSSortDescriptor,但我对如何与多个NSArray做吧不知道......

与往常一样,提示/答案/解决方案总是赞赏:)

+2

不能将包含日期的所有6个数据项打包到单个对象中,而不是将其保存在6个不同的数组中?然后你将有一个单一的数组。只需按日期属性对该数组进行排序即可。 – Anurag

+0

是的,谢谢,这实际上是苏丹和本建议的。我不敢相信我甚至没有想到:) – rdurand

回答

4

这是一个共同的问题。使用以下方法。

  1. 将您的六个数组封装到一个对象中 - 每个实例都有六个属性。
  2. 执行compare:关于此对象的方法,使用[NSDate compare:](这一步可以跳过,但这种方法更清洁)。
  3. 现在你只有一个阵列 - 使用排序从第2步
+0

谢谢。正如我在我的问题中评论的,我不敢相信我没有想到:) – rdurand

2

我认为更好的解决方案让您有NSDictionary中的对象的NSArray的方法吧。

NSArray *allValues = [[NSArray alloc] init]; 
NSDictionary *dict = @{"Date" : [NSDate date], @"Key1" : @"Value1", @"Key2" : @"Value2"}; 

然后你可以用sortDescriptor排序这个数组没有任何问题。 然后,您也可以根据需要使用Comparator或Sort Desriptor。

+1

这实际上不是一个坏主意,使用字典。我曾经使用过很多次数组,使我从其他容器中失明。非常感谢! – rdurand

1

将您在数组中存储的所有项目包装到单个对象中。您之前的6个阵列中的每一个都是属性。

内部的对象,你可以实现

- (NSComparisonResult)compare:(YourClass *)otherObject { 
    return [self.date compare:otherObject.date]; 
} 

您可以在阵列现在排序,他们会按日期排序。

+0

谢谢,我可能会用这样的东西去。抱歉,但@Sulthan提前2分钟发布了类似的解决方案,所以我必须接受他的回答:) – rdurand