NSArray排序问题

忘是亡心i 2022-08-10 20:00 253阅读 0赞
  1. .h声明文件
  2. @interface Person : NSObject{
  3. NSString *_name;//姓名
  4. NSInteger _age;//年龄
  5. CGFloat _height;//身高
  6. }
  7. //初始化
  8. - (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
  9. //姓名
  10. - (void)setName:(NSString *)name;
  11. - (NSString *)name;
  12. //年龄
  13. - (void)setAge:(NSInteger)age;
  14. - (NSInteger)age;
  15. //身高
  16. - (void)setHeight:(CGFloat)height;
  17. - (CGFloat)height;
  18. //比较age
  19. - (NSComparisonResult)compareByAge:(Person *)anPerson;
  20. //比较身高
  21. - (NSComparisonResult)compareByHeight:(Person *)anPerson;
  22. //比较名字升序
  23. - (NSComparisonResult)compareByName:(Person *)anPerson;
  24. //名字降序
  25. - (NSComparisonResult)compareByNameDesceding:(Person *)anPerson;
  26. .m实现文件
  27. #import "Person.h"
  28. @implementation Person
  29. #pragma mark - setter and getter
  30. //set姓名
  31. - (void)setName:(NSString *)name{
  32. _name = name;
  33. }
  34. - (NSString *)name{
  35. return _name;
  36. }
  37. //set年龄
  38. - (void)setAge:(NSInteger)age{
  39. _age = age;
  40. }
  41. - (NSInteger)age{
  42. return _age;
  43. }
  44. //set身高
  45. - (void)setHeight:(CGFloat)height{
  46. _height = height;
  47. }
  48. - (CGFloat)height{
  49. return _height;
  50. }
  51. #pragma mark - init method
  52. //初始化
  53. - (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height{
  54. self = [super init];
  55. if (self != nil) {
  56. _name = name;
  57. _age = age;
  58. _height = height;
  59. }
  60. return self;
  61. }
  62. #pragma mark - override method
  63. //重写description
  64. - (NSString *)description{
  65. return [NSString stringWithFormat:@"name:%@ age:%ld, height:%g", _name, _age, _height];
  66. }
  67. #pragma mark - compare
  68. //比较年龄age
  69. - (NSComparisonResult)compareByAge:(Person *)anPerson{
  70. if ([self age] > [anPerson age]) {
  71. return NSOrderedDescending;//1 降序
  72. }else if([self age] == [anPerson age]){ //相等
  73. return NSOrderedSame;//0
  74. }else{
  75. return NSOrderedAscending;//-1 升序
  76. }
  77. }
  78. //比较身高
  79. - (NSComparisonResult)compareByHeight:(Person *)anPerson{
  80. if ([self height] > [anPerson height]) {
  81. return NSOrderedDescending;
  82. }else if([self height] == [anPerson height]){
  83. return NSOrderedSame;
  84. }else{
  85. return NSOrderedAscending;
  86. }
  87. }
  88. //比较名字
  89. - (NSComparisonResult)compareByName:(Person *)anPerson{
  90. // if ([[self name] compare:[anPerson name]] == 1 ) {
  91. // return NSOrderedDescending;
  92. // }else if([[self name] compare:[anPerson name]] == 0){
  93. // return NSOrderedSame;
  94. // }else{
  95. // return NSOrderedAscending;
  96. // }
  97. return [[self name] compare:[anPerson name]];
  98. }
  99. //名字降序
  100. - (NSComparisonResult)compareByNameDesceding:(Person *)anPerson{
  101. return -[[self name] compare:[anPerson name]];
  102. }
  103. main.m文件
  104. #import "Person.h"
  105. int main(int argc, const char * argv[])
  106. {
  107. @autoreleasepool {
  108. Person *per1 = [[Person alloc] initWithName:@"xiaoshuai" age:12 height:178];
  109. Person *per2 = [[Person alloc] initWithName:@"xiaomeng" age:22 height:175];
  110. Person *per3 = [[Person alloc] initWithName:@"xiaoguangguang" age:20 height:180];
  111. Person *per4 = [[Person alloc] initWithName:@"dapeng" age:30 height:190];
  112. NSArray *perArr = [[NSArray alloc] initWithObjects:per1,per2,per3,per4, nil];
  113. //对数组按姓名升序排序
  114. NSArray *sortArrName = [perArr sortedArrayUsingSelector:@selector(compareByName:)];
  115. NSLog(@"%@", sortArrName);
  116. //对数组中年龄升序排序
  117. NSArray *sortArrAge = [perArr sortedArrayUsingSelector:@selector(compareByAge:)];
  118. NSLog(@"%@", sortArrAge);
  119. //对数组中身高按升序排序
  120. NSArray *sortArrHeight = [perArr sortedArrayUsingSelector:@selector(compareByHeight:)];
  121. NSLog(@"%@", sortArrHeight);
  122. //名字降序
  123. NSArray *sortArrNameDescending = [perArr sortedArrayUsingSelector:@selector(compareByNameDesceding:)];
  124. NSLog(@"%@", sortArrNameDescending);

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读