bog*_*gen 1 sorting objective-c nssortdescriptor ios
是否可以使用NSSortDescriptor首先对给定值进行排序,然后在对象名称后面进行排序?
NSArray *values = @[@"Fish",@"Me", @"Aardvark ", @"Turtle"]
Run Code Online (Sandbox Code Playgroud)
通缉结果:
NSArray *sortedvalues = @[@"Me", @"Aardvark",@"Fish", @"Turtle"]
Run Code Online (Sandbox Code Playgroud)
排序描述符用于当包含的对象符合KVO时(响应valueForKey :).用比较器做的方法是......
NSArray *values = @[@"Fish",@"Me", @"Aardvark ", @"Turtle"];
NSComparisonResult (^comparator)(id,id) = ^(id left, id right) {
if ([left isEqualToString:@"Me"]) return NSOrderedAscending;
if ([right isEqualToString:@"Me"]) return NSOrderedDescending;
return [left compare:right];
};
NSArray *sortedValues = [values sortedArrayUsingComparator:comparator];
Run Code Online (Sandbox Code Playgroud)
我想你可以添加一个空键路径并使用排序描述符(感谢@Prince),但这似乎是一个额外的步骤......
// define the comparator as above
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"" ascending:YES comparator:comparator];
NSArray *sorted = [values sortedArrayUsingDescriptors:@[sd]];
Run Code Online (Sandbox Code Playgroud)
编辑
假设数组的元素实际上是KVO对象.然后排序描述符更自然.只需将上面给出的想法应用于字符串的关键路径,例如
NSDictionary *kvo0 = @{ @"prop": @"Fish"};
NSDictionary *kvo1 = @{ @"prop": @"Me"};
NSDictionary *kvo2 = @{ @"prop": @"Ardvark"};
NSDictionary *kvo3 = @{ @"prop": @"Turtle"};
NSArray *values = @[kvo0, kvo1, kvo2, kvo3];
NSComparisonResult (^comparator)(id,id) = ^(id left, id right) {
if ([left isEqualToString:@"Me"]) return NSOrderedAscending;
if ([right isEqualToString:@"Me"]) return NSOrderedDescending;
return [left compare:right];
};
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"prop" ascending:YES comparator:comparator];
NSArray *sorted = [values sortedArrayUsingDescriptors:@[sd]];
Run Code Online (Sandbox Code Playgroud)
您需要将@"prop"更改为要对托管对象进行排序的密钥路径.
| 归档时间: |
|
| 查看次数: |
471 次 |
| 最近记录: |