将一个NSArray和匹配顺序排序到第二个阵列?

时间:2012-06-25 14:48:45

标签: iphone objective-c ipad sorting

我有两个NSMutabeArrays,一个充满数字,另一个充满了单词。

让我们说这两个数组看起来像这样:

1  hello
24 no
11 there
5  boo

现在我订购了第一个数组,因此数字正在下降(如下所示,我希望单词随数字一起移动,以便它们保持与它们相关联的原始数字):

24 no
11 there
5  boo
1  hello

知道如何实现这一目标吗?感谢。

3 个答案:

答案 0 :(得分:4)

您应该将数字和单词组合成一个具有两者属性的对象。然后,您可以维护这些对象的有序数组,而不是尝试协调两个独立的数组。

实现此目的的一种方法是使用NSDictionary,但我通常建议使用一个简单的模型对象来保存这两个值:

@interface SomeObject : NSObject
@property (nonatomic, readwrite, strong) NSString *word;
@property (nonatomic, readwrite, assign) NSUInteger number;
@end

@implementation SomeObject
@synthesize word=_word;
@synthesize number=_number;
@end

还有其他方法可以构建这个对象(例如,你可以使它不可变,这对多线程应用程序很有用),但这是最简单的。

答案 1 :(得分:1)

这两个数组显然非常紧密耦合,因此您希望在程序设计中反映这种耦合,而不仅仅是将其隐藏在排序例程的实现中。如何最好地做到这一点取决于您必须适应解决方案的上下文。单阵列解决方案可能是最好的,也可能不是。另一种可能的解决方案是创建一个包含两个数组的新类,并负责在排序,插入,删除等时保持其一致性。

答案 2 :(得分:0)

虽然不是最佳答案,但肯定是我实现多列表的方法(可以按任何列排序)。

我这样做是为了让代码本身在平台之间更易于移植。

执行此操作的方法是保存索引映射数组。它的工作方式是,你有dataArray1和dataArray 2.如果你想按dataArray1排序,那么你在映射数组中保存新的映射的indeces(当你对dataArray1进行排序时)。完成排序后,映射数组保存的数据将是dataTable2中的索引,需要放在索引的位置的映射数组。

我看到很多关于数据耦合的答案。这在很大程度上取决于您打算如何使用数据。在我的设计中,数据只需要在表格视图中显示时(以及用于显示表格),但在我的图表视图中,数据排序并不是这样,因此不需要耦合。我认为这里有很多好的答案,问题是这些数据的设计是什么?