在 Objective-C 中对 NSArray 和 NSMutableArray 进行排序

Sorting NSArray and NSMutableArray in Objective-C

提问人:user3470496 提问时间:2/11/2021 更新时间:2/12/2021 访问量:74

问:

我有一个包含 6 个带有图像像素数据的 3D 数组的 NSArray,以及一个包含 6 个值的 NSMutableArray。我想对 NSMutableArray 数组进行数字排序,并按照与 NSMutableArray 排序相同的顺序对 NSArray 进行排序。我知道如何在 python 中做到这一点,但我对 Objective-C 并不擅长

即: 从: NSArray = [img1, img2, img3] NSMutableArray = [5, 1, 9] 自: NSArray = [img2, img1, img3] NSMutableArray = [1, 5, 9]

NSArray *imageArray = [...some images];

NSMutableArray *valueList = [[NSMutableArray alloc] initWithCapacity:0];

float value1 = 5.0;
float value2 = 1.0;
float value3 = 9.0;

[valueList addObject:[NSDecimalNumber numberWithFloat:value1]];

[valueList addObject:[NSDecimalNumber numberWithFloat:value2]];

[valueList addObject:[NSDecimalNumber numberWithFloat:value3]];
数组 objective-c swift 排序 nsarray

评论

0赞 IronMan 2/11/2021
嗨,也许是一种自定义比较方法 stackoverflow.com/questions/805547/......
0赞 Willeke 2/11/2021
这回答了你的问题吗?将两个 NSArray 并排排序
0赞 Larme 2/11/2021
旁注:如果链接到 value ,则最好使用(或自定义)和它们的数组。这样可以避免每次更改顺序时,都会更改一个元素以反映第二个数组上的操作。img15NSDictionaryClass

答:

1赞 Amin Negm-Awad 2/12/2021 #1

您可能从一开始就使用了错误的数据结构。你不应该在不同的数组中提出键值对。然而。。。

首先创建一个字典来配对两个列表,然后对键进行排序,最后检索值:

NSArray *numbers = …; // for sorting
NSArray *images = …;  // content

// Build pairs
NSDictionary *pairs = [NSDictionary dictionaryWithObjects:images forKeys:numbers];

// Sort the index array
numbers = [numbers sortedArrayByWhatever]; // select a sorting method that's comfortable for you

// Run through the sorted array and get the corresponding value
NSMutableArray *sortedImages = [NSMutableArray new];
for( id key in numbers )
{
   [sortedImages appendObject:pairs[key]];
}