objective-c – 根据另一个NSArray字符串的排序对自定义对象的NSArray进行排序

我有两个NSArray对象,我希望对它们进行相同的排序.一个包含NSString对象,另一个包含自定义Attribute对象.这是我的“关键”NSArray的样子:

// The master order
NSArray *stringOrder = [NSArray arrayWithObjects:@"12", @"10", @"2", nil];

带有自定义对象的NSArray:

// The array of custom Attribute objects that I want sorted by the stringOrder array
NSMutableArray *items = [[NSMutableArray alloc] init];
Attribute *attribute = nil;

attribute = [[Attribute alloc] init];
attribute.assetID = @"10";
[items addObject:attribute];

attribute = [[Attribute alloc] init];
attribute.assetID = @"12";
[items addObject:attribute];

attribute = [[Attribute alloc] init];
attribute.assetID = @"2";
[items addObject:attribute];

所以,我想要做的是使用stringOrder数组来确定自定义对象的items数组的排序.
我怎样才能做到这一点?

最佳答案
在此,我直接将stringOrder中的obj1.assetID索引与stringOrder中的obj2.assetID索引进行比较(使用@()的Objective-C文字来转换NSString => NSNumber)

[items sortUsingComparator:^NSComparisonResult(Attribute *obj1, Attribute *obj2) {
    return [@([stringOrder indexOfObject:obj1.assetID]) compare:@([stringOrder indexOfObject:obj2.assetID])]
}];

或者没有ObjC文字:

[items sortUsingComparator:^NSComparisonResult(Attribute *obj1, Attribute *obj2) {
    return [[NSNumber numberWithInt:[stringOrder indexOfObject:obj1.assetID]] compare:[NSNumber numberWithInt:[stringOrder indexOfObject:obj2.assetID]]]
}];

转载注明原文:objective-c – 根据另一个NSArray字符串的排序对自定义对象的NSArray进行排序 - 代码日志