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

Sort other arrays based on one array (Obj-C)

我有三个 NSMutableArray:

NSMutableArray *dateArray;
NSMutableArray *nameArray;
NSMutableArray *imageArray

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

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

不考虑为什么你有三个数组,这里是一个将它们 "sort" 放在一起的算法:

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

在此之后你将得到一个整数数组,你可以使用它来间接索引你的三个数组,例如类似于:

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

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

如果需要,您当然可以使用 sortedIndicies 对您原来的 3 个数组重新排序。

还有其他方法可以实现您的要求,例如,您可以 "zip" 将您的三个数组合并为一个包含三个项目的数组,排序,然后再次 "unzip"。 NSArray不提供zip操作,需要自己写(都是简单的循环)

HTH


[†] 您可以根据需要使用 "fake" 数组,有关灵感,请参阅 - 您的实现可能更简单。