整理数据

  • 获取汉字拼音的首字母
/**获取汉字拼音的首字母, 返回的字母是大写形式, 例如: @"俺妹", 返回 @"A".*如果字符串开头不是汉字, 而是字母, 则直接返回该字母, 例如: @"b美女", 返回 @"B".*如果字符串开头不是汉字和字母, 则直接返回 @"#", 例如: @"&哈哈", 返回 @"#".*字符串开头有特殊字符(空格,换行)不影响判定, 例如@"   a啦啦啦", 返回 @"A".*/- (NSString *)getFirstLetter {NSString *words = [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];if (words.length == 0) {return nil;}NSString *result = nil;unichar firstLetter = [words characterAtIndex:0];int index = firstLetter - HANZI_START;if (index >= 0 && index <= HANZI_COUNT) {result = [NSString stringWithFormat:@"%c", firstLetterArray[index]];} else if ((firstLetter >= 'a' && firstLetter <= 'z')|| (firstLetter >= 'A' && firstLetter <= 'Z')) {result = [NSString stringWithFormat:@"%c", firstLetter];} else {result = @"#";}return [result uppercaseString];
}
  • 将一个字符串数组按照拼音首字母规则进行重组排序, 返回重组后的数组
/**将一个字符串数组按照拼音首字母规则进行重组排序, 返回重组后的数组.*格式和规则为:[@{@"firstLetter": @"A",@"content": @[@"啊", @"阿狸"]},@{@"firstLetter": @"B",@"content": @[@"部落", @"帮派"]},...]*只会出现有对应元素的字母字典, 例如: 如果没有对应 @"C"的字符串出现, 则数组内也不会出现 @"C"的字典.*数组内字典的顺序按照26个字母的顺序排序*@"#"对应的字典永远出现在数组最后一位*/- (NSArray *)arrayWithPinYinFirstLetterFormat {if (![self count]) {return [NSMutableArray array];}NSMutableDictionary *dict = [NSMutableDictionary dictionary];[dict setObject:[NSMutableArray array] forKey:@"#"];for (int i = 'A'; i <= 'Z'; i++) {[dict setObject:[NSMutableArray array]forKey:[NSString stringWithUTF8String:(const char *)&i]];}for (NSDictionary *dic in self) {NSString *words = dic[@"title"];NSString *firstLetter = [words getFirstLetter];NSMutableArray *array = dict[firstLetter];[array addObject:dic];}NSMutableArray *resultArray = [NSMutableArray array];for (int i = 'A'; i <= 'Z'; i++) {NSString *firstLetter = [NSString stringWithUTF8String:(const char *)&i];NSMutableArray *array = dict[firstLetter];if ([array count]) {[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {NSString *word1 = obj1[@"title"];NSString *word2 = obj2[@"title"];return [word1 localizedCompare:word2];}];NSDictionary *resultDict = @{@"firstLetter": firstLetter,@"content": array};[resultArray addObject:resultDict];}}if ([dict[@"#"] count]) {NSMutableArray *array = dict[@"#"];[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {NSString *word1 = obj1[@"title"];NSString *word2 = obj2[@"title"];return [word1 localizedCompare:word2];}];NSDictionary *resultDict = @{@"firstLetter": @"#",@"content": array};[resultArray addObject:resultDict];}return resultArray;
}
  • 将没有排序的数组按字母首字母的顺序排列, 生成新的排序数组:
self.firstLitterArray = (self.bankArray! as NSArray).withPinYinFirstLetterFormat() as! [[String:Any]]

UITableView协议

  • 实现UITableViewDelegate,UITableViewDataSource以下的协议:
 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {return 35}func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {let view = UIView.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 35))view.backgroundColor = UIColor.init(red: 212/255.0, green: 212/255.0, blue: 212/255.0, alpha: 1)let label = UILabel.init(frame: CGRect.init(x: 16, y: 0, width: 15, height: 35))label.text = (self.firstLitterArray[section]["firstLetter"] as! String)label.textAlignment = .centerlabel.textColor = UIColor.init(red: 153/255.0, green: 153/255.0, blue: 153/255.0, alpha: 1)label.font = UIFont.boldSystemFont(ofSize: 14)view.addSubview(label)return view}func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {return (self.firstLitterArray[section]["firstLetter"] as! String)}func sectionIndexTitles(for tableView: UITableView) -> [String]? {var title : [String] = []for i in 0 ..< self.firstLitterArray.count {title.append(self.firstLitterArray[i]["firstLetter"] as! String)}return title}func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {if title == UITableView.indexSearch {return NSNotFound}return UILocalizedIndexedCollation.current().section(forSectionIndexTitle: index)}

效果展示

完整示例

Swift之UITableView新增“索引”数组快速定位查找数据

Swift之实现表格UITableView数据首字母顺序排列展示并添加“索引”快速定位查找功能相关推荐

  1. IOS开发中实现UITableView按照首字母将集合进行检索分组

    在开发公司项目中遇到了将图书目录进行按照首字母分组排序的问题 1.在项目添加解析汉字拼音的Pinyin.h文件 /** pinyin.c*/ #define HANZI_START 19968 #de ...

  2. ListView 联动 SideBar ,根据数据首字母进行排序

    站在巨人肩上,走的会更快! 直接上代码. 第一步  自定义与ListView 联动的View SideBar public class SideBar extends TextView {privat ...

  3. html5 字母索引,jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)

    大多数Web开发人员很可能很熟悉使用锚链接跳转到的页面部分的解决方案.你可以设置一个特定的name属性的锚链接,并使用href值作为哈希符号来跳过页面.这种效果当需要列出很长的数据集时,是非常实用的, ...

  4. 汉字转首字母大写并排序

    刚接到上述功能要求时,去找后台要接口,被告知,没有分类接口,只有一个查询所有商家的接口,排序分类要自己做(我有句MMP一定要讲),没办法,工作还得做以下是代码 HML <div class=&q ...

  5. select2通过全拼及首字母匹配汉字

    (注:原文出自qq_33142257的博客http://blog.csdn.net/qq_33142257/article/details/52575823 以及qq_28685573的博客http: ...

  6. Word如何取消自动拼写检查、自动句首字母大写

    Word如何取消自动拼写检查.自动句首字母大写 用了Word这么久,最讨厌的两个功能就是自动拼写检查和自动句首字母大写.以前是懒去把这功能关了,今天实在忍不住了,下面贴解决方案: 1.Word取消自动 ...

  7. 简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗

    UITableView索引功能是常见的,主要是获取中英文的首字母并排序,系统自带获取首字母 //系统获取首字母 - (NSString *) pinyinFirstLetter:(NSString*) ...

  8. ajax返回的数据怎么显示出来_Excel输入汉字、拼音首字母就能显示数据出来,录数据时逐步提示...

    在办公中经常需要录入数据,特别是财务,人力资源,采购这块,经常需要 如果经常复制.粘贴很累,即使用到数据有效性进行设置,数据量多了,也不好选择. 所以,这里介绍两个Excel插件E灵和EXCEL必备工 ...

  9. mysql 按首字母进行检索数据

    一.介绍 最近有个这样的需求,一张有大量数据元素的表,这里就暂且举例为 student 表,现在要按照学生的首字母来进行检索学生信息.比如用户输入"ZS",获得的学生列表的姓名第一 ...

最新文章

  1. 学习微信小程序之css14浮动的特性
  2. androidHandler讲解
  3. nginx配置ssl双向证书
  4. Python教程:shift函数实现数据偏移的方法
  5. BZOJ4974 字符串大师(kmp)
  6. Matlab 2022a 安装教程(手把手式教程 超简单)
  7. 关于hibernate的关联外键生成以及外键属性列的正确插入即:解决外键插入时,在关联表中除了外键列为空,其它属性均正常级联保存
  8. [HNOI2008]玩具装箱toy(dp+斜率优化)
  9. 才博教育:AI口语学习平台上云
  10. .net core 正则表达式 获取 等号后面的值_Python3 正则表达式
  11. 专家点评Science | 朱冰/许瑞明合作团队报道CpG岛结合蛋白BEND3作用机制
  12. 基于JAVA+Servlet+JSP+MYSQL的停车场管理系统
  13. linux svn 设置propertise
  14. 用reloadRowsAtIndexPaths刷新单个cell 跳动问题
  15. Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论
  16. java地图自动定位_如何实现高德地图实现自动定位
  17. PT100铂热电阻查询表
  18. 获取当前日期的上一个月和后三个月。
  19. linux下,fping命令与ping命令解析
  20. Matlab 多元线性回归

热门文章

  1. BZOJ 1305 dance跳舞(最大流+二分答案)
  2. 网络编程第三讲UDP编写
  3. Linux命令 - 帮助命令 man
  4. 用“夜间模式”模式(javascript书签)浏览网页
  5. 五阶行列式的对角线之和,函数实现
  6. linux怎么知道ping命令,教程方法;通过ping命令查看服务器类型(linux还是windows系列)电脑技巧-琪琪词资源网...
  7. Java黑皮书课后题第2章:*2.22(金融应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题。以整数值作为输入,其最后两位代表的是美分币值
  8. 河中跳房子(noiopenjudge,noip2015)
  9. C# 去重处理字符大小写
  10. 001.Parted工具使用