基于一个数组对其他数组进行排序(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" 数组,有关灵感,请参阅 - 您的实现可能更简单。
我有三个 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" 数组,有关灵感,请参阅