对包含2种对象的NSmutableArray进行排序?

ary*_*axt 5 objective-c nsmutablearray nssortdescriptor

我有一个NSMutableArray,包含两种类型的对象.

两个对象都包含一个具有不同名称的日期字段(具有不同格式的日期字符串).

什么是根据日期对它们进行排序的最佳和最快的方法?NSSortDescriptor在这种情况下是否可以使用?

Joe*_*Joe 4

如果您的目标是 Mac OS X v10.6 或 iOS4 及更高版本,您可以使用与此类似的比较器进行排序

NSDateFormatter *formatter1 = ...; //create and configure date formatter for Class1
NSDateFormatter *formatter2 = ...; //create and configure date formatter for Class2


[arrayOfObjects sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSDate *date1 = nil, *date2 = nil;
    //Get first objects date
    if([obj1 isKindOfClass:[Class1 class]])
    {
        date1 = [formatter1 dateFromString:[obj1 class1Date]];
    }
    else if([obj1 isKindOfClass:[Class2 class]])
    {
        date1 = [formatter2 dateFromString:[obj1 class2Date]];
    }

    //Get second objects date
    if([obj2 isKindOfClass:[Class1 class]])
    {
        date2 = [formatter1 dateFromString:[obj2 class1Date]];
    }
    else if([obj2 isKindOfClass:[Class2 class]])
    {
        date2 = [formatter2 dateFromString:[obj2 class2Date]];
    }

    NSAssert(date1 != nil, @"Could not parse date from %@", obj1);
    NSAssert(date2 != nil, @"Could not parse date from %@", obj2);

    return [date1 compare:date2];
}];
Run Code Online (Sandbox Code Playgroud)

除了检查类之外,您还可以检查它是否响应选择器。

  • 从“id”中转换对象是完全没有必要的。 (2认同)