如何通過比較其中一個屬性(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