如何通过比较其中一个属性(NSString *
)与另一个(NSString *
)数组中的对象(NSString *
)来排序对象数组?按属性排列对象数组等于另一个数组的对象
我填充了一个数组, Person
对象中有多个线程完成的顺序。然后,我想将每个Person.name
与已经排序的名称对象数组进行比较。结果将是Person
数组按照与person.name
属性相同的顺序排列。
如何通过比较其中一个属性(NSString *
)与另一个(NSString *
)数组中的对象(NSString *
)来排序对象数组?按属性排列对象数组等于另一个数组的对象
我填充了一个数组, Person
对象中有多个线程完成的顺序。然后,我想将每个Person.name
与已经排序的名称对象数组进行比较。结果将是Person
数组按照与person.name
属性相同的顺序排列。
你可以尝试一些与此类似,用很少的细节就是最好的我能想出:
NSArray *array1 = [NSArray array];
NSArray *sortedArray = [NSArray array];
NSMutableArray *tmpArray = [NSMutableArray array];
for (id object in sortedArray)
{
if ([array1 containsObject:object])
[tmpArray addObject:object];
}
此代码回路扔数组排序并检查排序的数组包含了相同的对象。如果它确实放在tmpArray中。如果完成,它将包含它包含的项目的排序数组。
下面是我使用NSPredicate
找到的一个链接,用于更优化的解决方案https://stackoverflow.com/a/2873439/507299。
也许类似的东西
NSMutableArray *excluded = [NSMutableArray array];
NSArray *sortedNames = @[@"name1", @"name5", @"name3", /*more names*/ @"nameX"];
NSArray *tmp = [inputArray sortedArrayUsingComparator: ^(id p1, id p2) {
NSUInteger pos1 = [sortedNames indexOfObject:((Person *)p1).name];
NSUInteger pos2 = [sortedNames indexOfObject:((Person *)p2).name];
if (pos1 == NSNotFound && ![excluded containsObject:p1]) {
[excluded addObject:p1];
}
if (pos2 == NSNotFound && ![excluded containsObject:p2]) {
[excluded addObject:p2];
}
if (pos1 == pos2) return NSOrderedSame;
if (pos1 > pos2) return NSOrderedDescending;
return NSOrderedAscending;
}];
NSArray *sortedArray = [tmp subarrayWithRange:NSMakeRange(0, [tmp count] - [excluded count])];
你有一个代码示例,或至少有一些输入的实例和预期产出? – Joe
更新的问题谢谢。有没有一个排序描述符,而不是写一个自定义解决方案? – jarryd