使用自定义对象对 NSMutableArray 进行排序
Sort NSMutableArray with custom objects
我有一个带有 NSMutableArray
的 iOS 应用程序,其中包含多行数据(分为 3 个部分)- 如下所示:
[PFUser object, stringData, floatValue]
. . 4.3
. . 5.9
. . 1.1
. . 9.32
. . 0.024
上图显示了数组是如何拆分的以及存储在数组中的数据类型。但是这些数据类型不是键或任何东西。所以我不能做类似 valueForKey
.
的事情
数组的示例:
@[@[userObject, @"hello", @234.1441],
@[userObject, @"sdfsg", @94.33],
@[userObject, @"wrfdo", @24.897]
];
所以从上面的例子你可以看到我有数组中的数组。
我想通过读取包含浮点值的第 3 段来对数组进行排序。
我该怎么做?我在网上查看并阅读了很多有关使用 NSSortDescriptor
的内容,但我遇到的问题是所有示例似乎总是使用简单的字符串或仅包含数字的数组。
有没有办法在像我这样的自定义对象数组中使用 NSSortDescriptor
?
试试这个:
例如,在您的情况下,按浮点值对数组进行排序:
NSMutableArray *array = // Init your array;
array = [NSMutableArray arrayWithArray:[array sortedArrayUsingComparator:^(id obj1, id obj2) {
float value1 = [[obj1 objectAtIndex:2] floatValue];
float value2 = [[obj2 objectAtIndex:2] floatValue];
if (value1 < value2) {
return (NSComparisonResult)NSOrderedDescending;
} else if (value1 > value2) {
return (NSComparisonResult)NSOrderedAscending;
} else {
return (NSComparisonResult)NSOrderedSame;
}
}]];
使用此方法,您可以随意排序。
NSMutableArray 有一个调用sortUsingComparator,它以一个比较结果块作为参数。所以像这样:
[users sortUsingComparator:
^NSComparisonResult(id obj1, id obj2)
{
PFUser* userA = (PFUser*)obj1;
PFUser* userB = (PFUser*)obj2;
return [userA.floatValue compare:userB.floatValue];
}];
您可以使用sortUsingComparator:
[array sortUsingComparator:^(id obj1, id obj2) {
NSArray *arr1 = obj1;
NSArray *arr2 = obj2;
return [arr1[2] compare:arr2[2]];
}];
甚至(感谢 rmaddy 的建议):
[array sortUsingComparator:^(NSArray *arr1, NSArray *arr2) {
return [arr1[2] compare:arr2[2]];
}];
如果你有一个不可变数组,你可以使用sortedArrayUsingComparator:
我有一个带有 NSMutableArray
的 iOS 应用程序,其中包含多行数据(分为 3 个部分)- 如下所示:
[PFUser object, stringData, floatValue]
. . 4.3
. . 5.9
. . 1.1
. . 9.32
. . 0.024
上图显示了数组是如何拆分的以及存储在数组中的数据类型。但是这些数据类型不是键或任何东西。所以我不能做类似 valueForKey
.
数组的示例:
@[@[userObject, @"hello", @234.1441],
@[userObject, @"sdfsg", @94.33],
@[userObject, @"wrfdo", @24.897]
];
所以从上面的例子你可以看到我有数组中的数组。
我想通过读取包含浮点值的第 3 段来对数组进行排序。
我该怎么做?我在网上查看并阅读了很多有关使用 NSSortDescriptor
的内容,但我遇到的问题是所有示例似乎总是使用简单的字符串或仅包含数字的数组。
有没有办法在像我这样的自定义对象数组中使用 NSSortDescriptor
?
试试这个:
例如,在您的情况下,按浮点值对数组进行排序:
NSMutableArray *array = // Init your array;
array = [NSMutableArray arrayWithArray:[array sortedArrayUsingComparator:^(id obj1, id obj2) {
float value1 = [[obj1 objectAtIndex:2] floatValue];
float value2 = [[obj2 objectAtIndex:2] floatValue];
if (value1 < value2) {
return (NSComparisonResult)NSOrderedDescending;
} else if (value1 > value2) {
return (NSComparisonResult)NSOrderedAscending;
} else {
return (NSComparisonResult)NSOrderedSame;
}
}]];
使用此方法,您可以随意排序。
NSMutableArray 有一个调用sortUsingComparator,它以一个比较结果块作为参数。所以像这样:
[users sortUsingComparator:
^NSComparisonResult(id obj1, id obj2)
{
PFUser* userA = (PFUser*)obj1;
PFUser* userB = (PFUser*)obj2;
return [userA.floatValue compare:userB.floatValue];
}];
您可以使用sortUsingComparator:
[array sortUsingComparator:^(id obj1, id obj2) {
NSArray *arr1 = obj1;
NSArray *arr2 = obj2;
return [arr1[2] compare:arr2[2]];
}];
甚至(感谢 rmaddy 的建议):
[array sortUsingComparator:^(NSArray *arr1, NSArray *arr2) {
return [arr1[2] compare:arr2[2]];
}];
如果你有一个不可变数组,你可以使用sortedArrayUsingComparator: