Objective-C,按字母顺序对 class 类型的 NSMultable 数组进行排序?
Objective-C, Sorting an NSMultable array of type class, alphabetically?
我正在尝试对 属性 类型的可变数组进行排序。
但是我只设法对 NSString 数组进行排序。
NSMutableArray<DBFILESFileMetadata*> *tmpArray = [[NSMutableArray alloc]init];
for (DBFILESMetadata *entry in entries)
{
//conditions
[tmpArray addObject:fileMetadata];
}
这是类型/class
我试过了
[yourArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
和
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:sort]];
属性被称为名字
我见过这样的答案How can I sort an NSMutableArray alphabetically? ,但我似乎无法让它适用于我的场景。
为了使用 sortUsingSelector 进行排序,您需要在您尝试比较的对象中实施比较方法。 (所以你的 DBFILESMetadata
class 需要一个比较方法——上面代码中的 localizedCaseInsensitiveCompare
。)
您应该也可以使用您在第二次尝试中展示的排序描述符。当你这样做时会发生什么?
第三种方法是使用 NSMutableArray
sortUsingComparator
并编写一个 NSComparator
块来比较这两个对象。
我没有练习 Objective-C,但快速 Google 搜索找到了一个示例,我根据您的具体问题进行了调整:
[entries sortUsingComparator:
^NSComparisonResult(DBFILESMetadata *obj1, DBFILESMetadata *obj2)
{
return [obj1.name localizedCaseInsensitiveCompare: obj2.name];
}];
这应该行得通,尽管正如我所说,我没有练习 Objective-C,而且它的块语法非常笨拙且违反直觉。
我正在尝试对 属性 类型的可变数组进行排序。 但是我只设法对 NSString 数组进行排序。
NSMutableArray<DBFILESFileMetadata*> *tmpArray = [[NSMutableArray alloc]init];
for (DBFILESMetadata *entry in entries)
{
//conditions
[tmpArray addObject:fileMetadata];
}
这是类型/class
我试过了
[yourArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
和
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:sort]];
属性被称为名字
我见过这样的答案How can I sort an NSMutableArray alphabetically? ,但我似乎无法让它适用于我的场景。
为了使用 sortUsingSelector 进行排序,您需要在您尝试比较的对象中实施比较方法。 (所以你的 DBFILESMetadata
class 需要一个比较方法——上面代码中的 localizedCaseInsensitiveCompare
。)
您应该也可以使用您在第二次尝试中展示的排序描述符。当你这样做时会发生什么?
第三种方法是使用 NSMutableArray
sortUsingComparator
并编写一个 NSComparator
块来比较这两个对象。
我没有练习 Objective-C,但快速 Google 搜索找到了一个示例,我根据您的具体问题进行了调整:
[entries sortUsingComparator:
^NSComparisonResult(DBFILESMetadata *obj1, DBFILESMetadata *obj2)
{
return [obj1.name localizedCaseInsensitiveCompare: obj2.name];
}];
这应该行得通,尽管正如我所说,我没有练习 Objective-C,而且它的块语法非常笨拙且违反直觉。