如何在此属性上对自定义对象数组进行排序?

Ank*_*ava 5 sorting iphone objective-c ios

我有一个包含自定义对象的数组,其属性名为seat.座椅可具有值1A,1D,1C,1k,2A,2k,2D,2C.

现在这些可以按任何顺序排列,我想根据类对它们进行排序,但是排序只考虑座位数值而不是A,C,D或K.

我希望订单为1A,1C,1D,1K等.

这是我在SeatDO对象中实现的:

-(NSComparisonResult) compareBySeatNumber:(SeatDO*)other {
    NSComparisonResult result = NSOrderedSame;
    NSInteger seatNumber = [self.seat integerValue];
    NSInteger otherSeatNumber = [other.seat integerValue];

    if (seatNumber > otherSeatNumber) {
        result = NSOrderedDescending;
    } else if (seatNumber < otherSeatNumber) {
        result = NSOrderedAscending;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我如何让它也考虑到这些字母..?

Gab*_*lla 7

假设您将座位号转换为NSStrings

NSArray *sortedSeats = [seats sortedArrayUsingSelector:@selector(localizedStandardCompare:)]
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.排序字符串自然会遵循您需要的排序顺序.

否则你可以在比较期间使用字符串

[seats sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [[obj1 stringValue] localizedStandardCompare:[obj2 stringValue]];
}];
Run Code Online (Sandbox Code Playgroud)

我假设stringValue你可以使用自定义对象.如果没有,只需将其替换为将返回NSString实例描述的任何内容.

注意

正如Alladinian所建议的那样,你想要使用localizedStandardCompare:而不是caseInsensitiveCompare:为了获得正确的词典顺序.