[英]Sort NSArray of custom objects based on sorting of another NSArray of strings
[英]Sort NSMutableArray based on strings from another NSArray
我有一個NSArray
字符串,我想用作我的排序順序:
NSArray *permissionTypes = [NSArray arrayWithObjects:@"Read", @"Write", @"Admin", nil];
然后我有一個NSMutableArray
,它可能有也可能沒有所有這三種權限類型,但有時它只會是 2,有時是 1,但我仍然希望它根據我的permissionsTypes
數組進行排序。
NSMutableArray *order = [NSMutableArray arrayWithArray:[permissions allKeys]];
如何始終根據我使用permissionTypes
數組作為鍵對我的order
數組進行正確排序?
我會通過創建一個結構或對象來保存權限類型來解決這個問題。
那么你可以擁有...
PermissionType
--------------
Name: Read
Order: 1
PermissionType
--------------
Name: Write
Order: 2
等等。
然后你只需要這些對象的實際數組,你可以按順序值排序。
[array sortUsingComparator:^NSComparisonResult(PermissionType *obj1, PermissionType *obj2) {
return [obj1.order compare:obj2.order];
}];
這將按順序字段對數組進行排序。
NSMutableArray *sortDescriptors = [NSMutableArray array];
for (NSString *type in permissionTypes) {
NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:type ascending:YES] autorelease];
[sortDescriptors addObject:descriptor];
}
sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];
在NSMutableArray
您喜歡的任何排序方法,您將提供一個塊或一個選擇器來用於比較兩個元素。 在那個塊/選擇器中,而不是比較傳入的兩個字符串,使用indexOfObject:
在你的permissionTypes
數組中直接查找每個字符串,並比較返回的結果索引值。
我建議你另一種方法:
- (void)viewDidLoad
{
[super viewDidLoad];
arrayPermissions = [[NSMutableArray alloc] init];
NSDictionary *dicRead = [NSDictionary dictionaryWithObjectsAndKeys:
@"Read", @"Permission", nil];
NSDictionary *dicWrite = [NSDictionary dictionaryWithObjectsAndKeys:
@"Write", @"Permission", nil];
NSDictionary *dicAdmin = [NSDictionary dictionaryWithObjectsAndKeys:
@"Admin", @"Permission", nil];
NSLog(@"my dicRead = %@", dicRead);
NSLog(@"my dicWrite = %@", dicWrite);
NSLog(@"my dicAdmin = %@", dicAdmin);
[arrayPermissions addObject:dicRead];
[arrayPermissions addObject:dicWrite];
[arrayPermissions addObject:dicAdmin];
NSLog(@"arrayPermissions is: %@", arrayPermissions);
// create a temporary Dict again
NSDictionary *temp =[[NSDictionary alloc]
initWithObjectsAndKeys: arrayPermissions, @"Permission", nil];
// declare one dictionary in header class for global use and called "filteredDict"
self.filteredDict = temp;
self.sortedKeys =[[self.filteredDict allKeys]
sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"sortedKeys is: %i", sortedKeys.count);
NSLog(@"sortedKeys is: %@", sortedKeys);
}
希望幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.