Sorting 使用内部数组的最后一个元素对二维NSMutableArray进行排序
我有以下NSMutableArray:Sorting 使用内部数组的最后一个元素对二维NSMutableArray进行排序,sorting,nsmutablearray,Sorting,Nsmutablearray,我有以下NSMutableArray: (A|B|C|D|E|255, F|G|H|I|J|122, K|L|M|N|O|555) 我尝试使用最后一个组件(255、122、555)对数组中的对象进行排序。现在我有以下代码: [myArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 正如预期的那样,此方法按第一个元素(A、F、K)对数组进行排序 我还了解了NSSortDescriptor,例如: N
(A|B|C|D|E|255,
F|G|H|I|J|122,
K|L|M|N|O|555)
我尝试使用最后一个组件(255、122、555)对数组中的对象进行排序。现在我有以下代码:
[myArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
正如预期的那样,此方法按第一个元素(A、F、K)对数组进行排序
我还了解了NSSortDescriptor,例如:
NSSortDescriptor *sort = [[[NSSortDescriptor alloc] initWithKey:@"dateModified" ascending:YES] autorelease];
如果我使用它,不清楚我在
initWithKey
中作为参数输入了什么,我将使用sortUsingComparator:
[myArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2){
return [obj1.lastPropertyForComparison compare:obj2.lastPropertyForComparison];
}
此方法允许您手动比较要按其排序的对象的属性或成员。我几乎只在复杂的排序中使用它,我没有注意到任何性能差异
更新:
如果您的NSMutableArray包含NSArray,并且最后一个对象是您尝试按其排序的数字,那么您的比较器将如下所示:
[(NSNumber *)[obj1 lastObject] compare:(NSNumber *)[obj2 lastObject]]
基本上,您是从每个NSArray中抓取最后一个对象,您知道这是一个NSNumber。使用比较函数返回SensorDeredScending、SensorDeredScending或SensorDeredName。我希望这会有所帮助。我会使用sortUsingComparator:
[myArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2){
return [obj1.lastPropertyForComparison compare:obj2.lastPropertyForComparison];
}
此方法允许您手动比较要按其排序的对象的属性或成员。我几乎只在复杂的排序中使用它,我没有注意到任何性能差异
更新:
如果您的NSMutableArray包含NSArray,并且最后一个对象是您尝试按其排序的数字,那么您的比较器将如下所示:
[(NSNumber *)[obj1 lastObject] compare:(NSNumber *)[obj2 lastObject]]
基本上,您是从每个NSArray中抓取最后一个对象,您知道这是一个NSNumber。使用比较函数返回SensorDeredScending、SensorDeredScending或SensorDeredName。我希望这会有所帮助。我会使用sortUsingComparator:
[myArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2){
return [obj1.lastPropertyForComparison compare:obj2.lastPropertyForComparison];
}
此方法允许您手动比较要按其排序的对象的属性或成员。我几乎只在复杂的排序中使用它,我没有注意到任何性能差异
更新:
如果您的NSMutableArray包含NSArray,并且最后一个对象是您尝试按其排序的数字,那么您的比较器将如下所示:
[(NSNumber *)[obj1 lastObject] compare:(NSNumber *)[obj2 lastObject]]
基本上,您是从每个NSArray中抓取最后一个对象,您知道这是一个NSNumber。使用比较函数返回SensorDeredScending、SensorDeredScending或SensorDeredName。我希望这会有所帮助。我会使用sortUsingComparator:
[myArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2){
return [obj1.lastPropertyForComparison compare:obj2.lastPropertyForComparison];
}
此方法允许您手动比较要按其排序的对象的属性或成员。我几乎只在复杂的排序中使用它,我没有注意到任何性能差异
更新:
如果您的NSMutableArray包含NSArray,并且最后一个对象是您尝试按其排序的数字,那么您的比较器将如下所示:
[(NSNumber *)[obj1 lastObject] compare:(NSNumber *)[obj2 lastObject]]
基本上,您是从每个NSArray中抓取最后一个对象,您知道这是一个NSNumber。使用比较函数返回SensorDeredScending、SensorDeredScending或SensorDeredName。我希望这会有所帮助。您可以使用排序描述符,它获取“内部”数组的最后一个对象并按该对象排序 由于排序描述符使用键值编码(KVC),您需要知道数组以一种特殊的方式响应
valueForKey:
——它们将一个普通键传递给它们所包含的每个对象
您还需要知道,不接受参数并返回值的方法可以通过KVC is访问,如果它们是正常属性的话
所有这些加起来就是:
lastObject
NSArray
的实例,它们通常会将密钥传递给它们所包含的对象,这不是您想要的@
,使实际密钥使用@lastObject
NSMutableArray *array = ... // Your array
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @"@lastObject"
ascending: YES
selector: @selector(localizedCaseInsensitiveCompare:)];
[array sortUsingDescriptors: @[sd]];
您会注意到字符串中键名中的“@”
此转义字符也适用于其他集合类,例如,如果要通过KVC从字典中访问
allKeys
,则应使用@allKeys
,您可以使用排序描述符,它接受“内部”数组的最后一个对象并按该对象排序
由于排序描述符使用键值编码(KVC),您需要知道数组以一种特殊的方式响应valueForKey:
——它们将一个普通键传递给它们所包含的每个对象
您还需要知道,不接受参数并返回值的方法可以通过KVC is访问,如果它们是正常属性的话
所有这些加起来就是:
lastObject
NSArray
的实例,它们通常会将密钥传递给它们所包含的对象,这不是您想要的@
,使实际密钥使用@lastObject
NSMutableArray *array = ... // Your array
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @"@lastObject"
ascending: YES
selector: @selector(localizedCaseInsensitiveCompare:)];
[array sortUsingDescriptors: @[sd]];
您会注意到字符串中键名中的“@”
此转义字符也适用于其他集合类,例如,如果要通过KVC从字典中访问
allKeys
,则应使用@allKeys
,您可以使用排序描述符,它接受“内部”数组的最后一个对象并按该对象排序
由于排序描述符使用键值编码(KVC),您需要知道数组以一种特殊的方式响应valueForKey:
——它们将一个普通键传递给它们所包含的每个对象