使用 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
您可以使用以下代码比较包含不同类型和值的对象的数组。
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;
}
我有一个数组,它有两种类型的对象,即(对象 1、对象 2)。 Object1 具有名为 "title" 的属性,而 Object2 具有名为 "name".
的属性现在我想按字母顺序对数组进行排序。那么有什么方法可以让我使用 NSSortDescriptor(或任何其他东西)对包含具有不同 AttributesName 的对象的数组进行排序?
试试这个
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
NSArray *sortedArray = [detailsArray sortArrayUsingDescriptors:@[sortDescriptor]];
勾选这个link
您可以使用以下代码比较包含不同类型和值的对象的数组。
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;
}