我有一个由两个属性组成的对象数组:NSString
和BOOL
。我想对这个数组进行排序,以使YES
的所有BOOL
出现在所有NO
的布尔值之前。然后,我想要按照字母顺序排列BOOL YES
的对象列表,并且我还希望将NO
的对象按字母顺序排列。是否有某种类型的库可以在目标c中实现这一点?如果不是最有效的方法是什么?基于两个参数的排序数组
7
A
回答
20
您可以使用NSSortDescriptor
s完成排序:
// Set ascending:NO so that "YES" would appear ahead of "NO"
NSSortDescriptor *boolDescr = [[NSSortDescriptor alloc] initWithKey:@"boolField" ascending:NO];
// String are alphabetized in ascending order
NSSortDescriptor *strDescr = [[NSSortDescriptor alloc] initWithKey:@"strField" ascending:YES];
// Combine the two
NSArray *sortDescriptors = @[boolDescr, strDescr];
// Sort your array
NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];
您可以详细了解如何与描述here排序。
1
查找NSSortDescriptors。创建两个,一个用于字符串,一个用于布尔。然后将两者都添加到数组中。然后使用NSArray方法sortedArrayWiyhDescriptors。
3
使用排序描述符的替代方法是使用NSComparator
:
NSArray *myObjects = ... // your array of "Foo" objects
NSArray *sortedArray = [myObjects sortedArrayUsingComparator:^(Foo *obj1, Foo *obj2) {
if ((obj1.boolProp && obj2.boolProp) || (!obj1.boolProp && !obj2.boolProp)) {
// Both bools are either YES or both are NO so sort by the string property
return [obj1.stringProp compare:obj2.stringProp];
} else if (obj1.boolProp) {
// first is YES, second is NO
return NSOrderedAscending;
} else {
// second is YES, first is NO
return NSOrderedDescending;
}
)];
请注意,我可能最后两个落后。如果在Yes值之前将No值排序,则交换最后两个返回值。
相关问题
- 1. 基于两个参数的二维数组排序
- 2. 由两个参数排序的数组
- 3. 基于两列排序二维数组
- 4. 基于数值的Javascript数组排序基于数值的数组排序
- 5. 基于数字的排序数组
- 6. 基于多个值对数组排序
- 7. 重新排序关联数组基于参考关联数组
- 8. 基于一个int数组排序java中的多个数组
- 9. 排序两个参数
- 10. PHP的排序基于另一个数组的键值数组
- 11. 如何基于两个键值对数组键进行排序?
- 12. 基于列排序2D整数数组
- 13. 基于键值排序数据数组
- 14. 排序基于另一个配置数组的数组
- 15. 对基于另一个数组的数组进行排序C
- 16. 基于另一个数组键的排序多维数组键
- 17. 基于第三个数组的排序多维数组
- 18. 排序基于密钥的JSON数组
- 19. 基于NSNumber的词典排序数组
- 20. 基于三列的Java排序数组
- 21. 基于值的php数组排序器
- 22. 排序基于php数组的对象
- 23. 基于值的Tcl数组排序
- 24. 基于并行数组的python排序
- 25. 排序基于参数阵列长度
- 26. 基于另一个数组排序数组,然后在日期
- 27. 基于另一个多维数组排序多维数组?
- 28. 如何基于数组swift对多个数组进行排序?
- 29. 排序基于普通数组的顺序多维数组
- 30. 基于值组合两个数组php