iPhone - 通过CGRect的origin.x对字典数组进行排序

Spa*_*Dog 3 sorting iphone nsarray ios

我有一系列字典.每个字典都是这样的

object, @"myObject",
[NSValue valueWithCGRect:myRect], @"rect",
nil
Run Code Online (Sandbox Code Playgroud)

如何通过myRect.origin.x对该数组进行排序?

我知道objective-c有智能的方法来排序字典数组.我的问题在于我想按myRect的x坐标排序,myRect包含在NSValue中......用魔法命令做任何事情吗?我知道你们是魔术师!:d

谢谢.

war*_*enm 8

最彻底的方法可能是使用的方法等sortUsingComparator:sortedArrayUsingComparator(取决于阵列的可变性),并定义自定义比较器(块接受两个参数并返回NSComparisonResult),解包您rects并比较它们的x坐标.

编辑:嗯,因为其他人都提供代码,这是我的:

[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    CGRect rect1 = [[obj1 valueForKey:@"rect"] CGRectValue];
    CGRect rect2 = [[obj2 valueForKey:@"rect"] CGRectValue];

    if(rect1.origin.x < rect2.origin.x) {
        return NSOrderedAscending;
    } else if(rect1.origin.x > rect2.origin.x) {
        return NSOrderedDescending;
    } else {
        return NSOrderedSame;
    }
}];
Run Code Online (Sandbox Code Playgroud)