基于一个数组(Obj-C)对其他数组进行排序

时间:2017-05-19 17:26:55

标签: objective-c arrays sorting nsmutablearray

我有三个NSMutableArray:

NSMutableArray *dateArray;
NSMutableArray *nameArray;
NSMutableArray *imageArray

我想根据最近的日期对dateArray进行排序,然后让nameArray和imageArray基于dateArray的这个新排序顺序。

如何在不改变上面已设置的结构的情况下完成此操作?

1 个答案:

答案 0 :(得分:1)

不考虑为什么你有三个数组,这是一个将它们“排序”在一起的算法:

  • 创建一个与三个数组大小相同的新数组,这些数组填充从0开始的整数[†]。
  • 使用sortedArrayUsingComparator:将一个块传递给比较来“排序”这个新数组。
  • 将使用数组中的两个值调用您的块,即两个整数。使用这些整数索引到dataArray并比较您在那里找到的值,并将结果作为块结果返回。

在此之后,您将拥有一个可用于间接索引到三个数组的整数数组,例如:类似的东西:

NSArray *sortedIndicies = [arrayOfInts sortedArrayUsingComparator:...];

// first item according to the sort
id firstDate = dateArray[sortedIndicies[0]];
id firstName = nameArray[sortedIndicies[0]];

如果需要,您当然可以使用sortedIndicies重新排序原始的3个阵列。

还有其他方法可以实现您的需求,例如,您可以将三个数组“压缩”为三个项目的单个数组,排序,然后再“解压缩”。 NSArray不提供Z​​ip操作,因此您需要编写它们(两者都是一个简单的循环)。

HTH

[†]您可以根据需要使用“假”阵列,灵感见this answer - 您的实施可能更简单。