LCPinYinSortHelper.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. //
  2. // LCPinYinSortHelper.m
  3. // LiveChat
  4. //
  5. // Created by 张灿 on 2018/4/15.
  6. // Copyright © 2018年 caicai. All rights reserved.
  7. //
  8. #import "LCPinYinSortHelper.h"
  9. @implementation LCPinYinSortHelper
  10. + (NSMutableArray *)getSearchFullPinyinBY:(NSString*)searhName{
  11. NSMutableArray *ans = [[NSMutableArray alloc] init];
  12. NSMutableArray* data = [NSMutableArray arrayWithArray:[LCSaveData getCityDict].allValues];
  13. for (NSString* str in data) {
  14. if ([[self getFullPinyin:str] hasPrefix:[self getFullPinyin:searhName]]) {
  15. [ans addObject:str];
  16. }else if([[self getShortPinyin:str] hasPrefix:[self getFullPinyin:searhName]]){
  17. [ans addObject:str];
  18. }
  19. }
  20. NSArray *serializeArray = [(NSArray *)ans sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {//排序
  21. int i;
  22. NSString *strA = ((NSString *)obj1).fullPinyin;
  23. NSString *strB = ((NSString *)obj2).fullPinyin;
  24. for (i = 0; i < strA.length && i < strB.length; i ++) {
  25. char a = [strA characterAtIndex:i];
  26. char b = [strB characterAtIndex:i];
  27. if (a > b) {
  28. return (NSComparisonResult)NSOrderedDescending;//上升
  29. }
  30. else if (a < b) {
  31. return (NSComparisonResult)NSOrderedAscending;//下降
  32. }
  33. }
  34. if (strA.length > strB.length) {
  35. return (NSComparisonResult)NSOrderedDescending;
  36. }else if (strA.length < strB.length){
  37. return (NSComparisonResult)NSOrderedAscending;
  38. }else{
  39. return (NSComparisonResult)NSOrderedSame;
  40. }
  41. }];
  42. return [NSMutableArray arrayWithArray:serializeArray];
  43. }
  44. + (NSString*)getShortPinyin:(NSString*)str{
  45. NSMutableString *shortSpelling = [[NSMutableString alloc]init];
  46. for (NSInteger i = 0; i < [str length]; i++)
  47. {
  48. NSString *word = [str substringWithRange:NSMakeRange(i, 1)];
  49. NSString *pinyin = word.fullPinyin;
  50. if ([pinyin length])
  51. {
  52. [shortSpelling appendString:[pinyin substringToIndex:1]];
  53. }
  54. }
  55. return shortSpelling;
  56. }
  57. + (NSString*)getFullPinyin:(NSString*)str{
  58. NSMutableString *fullSpelling = [[NSMutableString alloc]init];
  59. for (NSInteger i = 0; i < [str length]; i++)
  60. {
  61. NSString *word = [str substringWithRange:NSMakeRange(i, 1)];
  62. NSString *pinyin = word.fullPinyin;
  63. if ([pinyin length])
  64. {
  65. [fullSpelling appendString:pinyin];
  66. }
  67. }
  68. return fullSpelling;
  69. }
  70. + (NSMutableArray *) getCityListDataBy:(NSMutableArray *)array{
  71. NSMutableArray *ans = [[NSMutableArray alloc] init];
  72. NSArray *serializeArray = [(NSArray *)array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {//排序
  73. int i;
  74. NSString *strA = ((NSString *)obj1).pinYin;
  75. NSString *strB = ((NSString *)obj2).pinYin;
  76. for (i = 0; i < strA.length && i < strB.length; i ++) {
  77. char a = [strA characterAtIndex:i];
  78. char b = [strB characterAtIndex:i];
  79. if (a > b) {
  80. return (NSComparisonResult)NSOrderedDescending;//上升
  81. }
  82. else if (a < b) {
  83. return (NSComparisonResult)NSOrderedAscending;//下降
  84. }
  85. }
  86. if (strA.length > strB.length) {
  87. return (NSComparisonResult)NSOrderedDescending;
  88. }else if (strA.length < strB.length){
  89. return (NSComparisonResult)NSOrderedAscending;
  90. }else{
  91. return (NSComparisonResult)NSOrderedSame;
  92. }
  93. }];
  94. char lastC = '1';
  95. NSMutableArray *data;
  96. NSMutableArray *oth = [[NSMutableArray alloc] init];
  97. for (NSString *user in serializeArray) {
  98. char c = [user.pinYin characterAtIndex:0];
  99. if (!isalpha(c)) {
  100. [oth addObject:user];
  101. }
  102. else if (c != lastC){
  103. lastC = c;
  104. if (data && data.count > 0) {
  105. [ans addObject:data];
  106. }
  107. data = [[NSMutableArray alloc] init];
  108. [data addObject:user];
  109. }
  110. else {
  111. [data addObject:user];
  112. }
  113. }
  114. if (data && data.count > 0) {
  115. [ans addObject:data];
  116. }
  117. if (oth.count > 0) {
  118. [ans addObject:oth];
  119. }
  120. return ans;
  121. }
  122. + (NSMutableArray *)getCityListSectionBy:(NSMutableArray *)array{
  123. NSMutableArray *section = [[NSMutableArray alloc] init];
  124. [section addObject:@"定位"];
  125. // [section addObject:UITableViewIndexSearch];
  126. for (NSArray *item in array) {
  127. NSString *user = [item objectAtIndex:0];
  128. char c = [user.pinYin characterAtIndex:0];
  129. // if (!isalpha(c)) {
  130. // [section addObject:@"定位"];
  131. // }
  132. [section addObject:[NSString stringWithFormat:@"%c", toupper(c)]];
  133. }
  134. return section;
  135. }
  136. @end