使用 NSSortDescriptor 对两个不同对象的数组进行排序

Sorting Array Of two different object using NSSortDescriptor

我有一个数组,它有两种类型的对象,即(对象 1、对象 2)。 Object1 具有名为 "title" 的属性,而 Object2 具有名为 "name".

的属性

现在我想按字母顺序对数组进行排序。那么有什么方法可以让我使用 NSSortDescriptor(或任何其他东西)对包含具有不同 AttributesName 的对象的数组进行排序?

试试这个

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
NSArray *sortedArray = [detailsArray sortArrayUsingDescriptors:@[sortDescriptor]];

勾选这个link

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html#//apple_ref/doc/uid/20001845-BAJEAIEE

您可以使用以下代码比较包含不同类型和值的对象的数组。

    arraySortedValues = [[arrayValues sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSString *string1 = @"";
        NSString *string2 = @"";
        if ([obj1 isKindOfClass:[Object1 class]]) {
            string1 = [obj1 valueForKey:@"title"];
        }
        if ([obj2 isKindOfClass:[Object1 class]]) {
            string2 = [obj2 valueForKey:@"title"];
        }
        if ([obj1 isKindOfClass:[Object2 class]]) {
            string1 = [obj1 valueForKey:@"name"];
        }
        if ([obj2 isKindOfClass:[Object2 class]]) {
            string2 = [obj2 valueForKey:@"name"];
        }
        return [string1 compare:string2];
    }] mutableCopy];

希望这对您有所帮助并让我知道.. :)

使用自定义 class 属性进行样本排序

// Sample class 
@interface Class1 : NSObject

@property(nonatomic) NSString *titleStr;

@end  

@interface Class2 : NSObject

@property(nonatomic) NSString *nameStr;

@end  

// Implementation Class

// 1 ======  Pass unsorted array ======

   NSArray sortedArray = [self getSortedArray:objArray];

// 2 Add below methods to your viewcontroller


//Sorting methods
- (NSArray *)getSortedArray:(NSMutableArray *)passedArray {

    NSArray *sortedArray = [passedArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

      return [[self getValue:obj1] compare:[self getValue:obj2]];

   }];

   return sortedArray;
}

- (NSString *)getValue:(id)obj {

   NSString *returnStr = @"";

   if ([obj isKindOfClass:[Class1 class]]) {
       returnStr = [obj valueForKey:@"titleStr"];
   }

   if ([obj isKindOfClass:[Class2 class]]) {
       returnStr = [obj valueForKey:@"nameStr"];
   }

   return returnStr;
 }