iOS分组排序
#import "TongXunLu.h"
#import "Student.h"
#import "UpdataVC.h"
#import "AddVC1.h"
#import "pinyin.h"
#import "ChineseString.h"
#import "ZhongWenPaiXu.h"
#import "PaiTou.h"
#import "paiTou1.h"
@implementation TongXunLu
@synthesize stuArray,stu,tableV,stu1,tempA,tempB,dictDict1;
- (void)viewDidLoad
{
[superviewDidLoad];
self.title=@"漂亮通讯录";
//初始化左右按钮
self.navigationItem.leftBarButtonItem=[selfeditButtonItem];
self.navigationItem.rightBarButtonItem=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAddtarget:selfaction:@selector(addStu1:)];
//初始化表视图。
tableV=[[UITableViewalloc]initWithFrame:CGRectMake(0, 0, 320, 416)];
self.tableV.delegate=self;
self.tableV.dataSource=self;
[self.view addSubview:tableV];
[tableV release];
//获取学生字典信息。
self.stuArray=[StudentfindAll];
self.tempA=[[NSMutableArrayalloc]init];
ChineseString *tempString1;
NSString *sss;
Student *student1;
for (int i=0; i<[[ZhongWenPaiXu zhongWenPaiXu:stuArray] count]; i++) {
tempString1=[[ZhongWenPaiXu zhongWenPaiXu:stuArray]objectAtIndex:i];
sss=tempString1.string;
student1=[Student findByName:sss];
// NSLog(@"sss====%@",sss);
// NSLog(@"sss====%@",student1.name);
[tempA addObject:student1];
}
NSLog(@"[[tempA objectAtIndex:0] name]====%@",[[tempAobjectAtIndex:0] name]);
// [self.stuArray removeAllObjects];
//
// self.stuArray = tempA;
self.tempB=[paiTou1zhongWenPaiXu:stuArray];
self.dictDict1=[PaiTouzhongWenPaiXu:stuArray];
NSLog(@"tempB==%@",tempB);
}
-(void)addStu1:(id)sender{
AddVC1 *addVC=[[AddVC1 alloc]init];
[self.navigationControllerpushViewController:addVC animated:YES];
}
#pragma mark=====uitableViewDelegate,uitableViewDataSource代理方法======
//点击编译按钮时表格的编译样式。
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
return tempB;
}
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
returnUITableViewCellEditingStyleDelete;
}
//设置编译开始。
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{
[super setEditing:editing animated:animated];
[self.tableV setEditing:editing animated:animated];
}
//设置section的title
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return [tempB objectAtIndex:section];
}
//设置section的数量。
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return [tempB count];
}
//设置每个section的行数。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
// return [stuArray count];
// return [tempB objectAtIndex:section];
return [[dictDict1objectForKey:[tempBobjectAtIndex:section]] count];
}
//显示每个单元格的信息。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIndentify=@"cell";//重用标示符。
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIndentify];//根据标示符重用cell。
if (cell==nil) {//如果没有可以重用的cell我们就新建一个。
cell=[[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:cellIndentify]autorelease];
}
//每一行的学生。
// stu=[tempA objectAtIndex:(indexPath.section+indexPath.row)];
NSString *ssss=[tempB objectAtIndex:indexPath.section];
NSMutableArray *ssss1=[dictDict1 objectForKey:ssss];
stu=[Student findByName:[ssss1 objectAtIndex:indexPath.row]];
cell.textLabel.text=stu.name;
cell.detailTextLabel.text=stu.tel;
cell.imageView.image=[UIImageimageWithData:stu.image];
return cell;
}
//点击单元格的方法。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UpdataVC *editVC=[[UpdataVC alloc]init];
[self.navigationControllerpushViewController:editVC animated:YES];
//每一行的学生信息。
stu=[tempA objectAtIndex:indexPath.row];
editVC.name.text=stu.name;
editVC.detailText.text=stu.detailText;
editVC.tel.text=stu.tel;
editVC.image.image=[UIImage imageWithData:stu.image];
editVC.sid.text=[NSString stringWithFormat:@"%d",stu.sid];
// [editVC release];//这里不能释放,不知道为什么,因为下个视图还要pop返回一下,这个操作也相当与release所以这里如果不对下个视图返回的话就可以大胆的release了。否则一定不能release。
}
//确定表格可以编译的行。
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
returnYES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
stu=[tempA objectAtIndex:indexPath.row];
//下面是删除的顺序,顺序不能错。
[Student deleteBySid:stu.sid];
[stuArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
if (editingStyle == UITableViewCellEditingStyleInsert) {//这个是添加的方法。这里没有用也没有添加数据库。
NSArray *insertIndexPaths=[NSArray arrayWithObjects:indexPath, nil];
[tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight];
}
}
//移动表格是方法。
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
NSUInteger fromRow=[fromIndexPath row];
NSUInteger toRow=[toIndexPath row];
id object =[tempA objectAtIndex:fromRow];
[tempAremoveObjectAtIndex:fromRow];
[tempA insertObject:object atIndex:toRow];
}
//这个方法就是确定他能执行移动操作的
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the item to be re-orderable.
returnYES;
}
-(void)viewWillAppear:(BOOL)animated{
self.stuArray=[StudentfindAll];
[self.tableVreloadData];
self.tempA=[[NSMutableArrayalloc]init];
ChineseString *tempString1;
NSString *sss;
Student *student1;
for (int i=0; i<[[ZhongWenPaiXu zhongWenPaiXu:stuArray] count]; i++) {
tempString1=[[ZhongWenPaiXu zhongWenPaiXu:stuArray]objectAtIndex:i];
sss=tempString1.string;
student1=[Student findByName:sss];
// NSLog(@"sss====%@",sss);
// NSLog(@"sss====%@",student1.name);
[tempA addObject:student1];
}
// NSLog(@"[[tempA objectAtIndex:0] name]====%@",[[tempA objectAtIndex:0] name]);
}
//
// PaiTou.m
// tongXunLu
//
// Created by Ibokan on 12-10-14.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "PaiTou.h"
#import "ZhongWenPaiXu.h"
#import "ChineseString.h"
#import "pinyin.h"
@implementation PaiTou
+(NSMutableDictionary *)zhongWenPaiXu:(NSMutableArray *)newArray{
//中文排序。
NSMutableArray *chineseStringsArray=[NSMutableArray array];
NSMutableDictionary *dictDict=[[NSMutableDictionaryalloc]init];
for(int i=0;i<[newArray count];i++){
ChineseString *chineseString=[[ChineseString alloc]init];
chineseString.string=[NSString stringWithString:[[newArray objectAtIndex:i]name] ];
if(chineseString.string==nil){
chineseString.string=@"";
}
if(![chineseString.string isEqualToString:@""]){
NSString *pinYinResult=[NSString string];
for(int j=0;j<chineseString.string.length;j++){
NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];
pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter]; }
chineseString.pinYin=pinYinResult;
}else{
chineseString.pinYin=@"";
}
[chineseStringsArray addObject:chineseString];
}
//Step2输出
// NSLog(@"\n\n\n转换为拼音首字母后的NSString数组");
// for(int i=0;i<[chineseStringsArray count];i++){
// ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
// NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
// }
//Step3:按照拼音首字母对这些Strings进行排序
NSArray *sortDescriptors = [NSArrayarrayWithObject:[NSSortDescriptorsortDescriptorWithKey:@"pinYin"ascending:YES]];
[chineseStringsArray sortUsingDescriptors:sortDescriptors];
//Step3输出
NSLog(@"\n\n\n按照拼音首字母后的NSString数组");
NSMutableSet *set=[NSMutableSetset];
for(int i=0;i<[chineseStringsArray count];i++){
ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
NSLog(@"排好的名字%@----名字的首字母String:%@",chineseString.string,[chineseString.pinYin substringToIndex:1]);
NSString *temps=[chineseString.pinYin substringToIndex:1];
NSLog(@"temps==%@",temps);
[set addObject:temps];
NSLog(@"set count ===%d set====%@",[set count],[set anyObject]);
}
NSLog(@"set count ===%d set====%@",[set count],[set allObjects]);
NSMutableArray *tempArray2=[NSMutableArray arrayWithArray:[set allObjects]];
NSLog(@"tempArray2==%@",tempArray2);
for (int m=0; m<[tempArray2 count]; m++) {
NSMutableArray *arrayLast=[[NSMutableArrayalloc]init];
for (int k=0; k<[chineseStringsArray count]; k++) {
ChineseString *chineseString=[chineseStringsArray objectAtIndex:k];
NSString *temps=[chineseString.pinYin substringToIndex:1];
if ([[tempArray2 objectAtIndex:m] isEqualToString:temps]) {
[arrayLast addObject:chineseString.string];//相同首字母的数组添加名字。
[dictDict setValue:arrayLast forKey:temps];
}
NSLog(@"dictDict count==%d,,,,%@",[dictDict count],[[dictDict objectForKey:temps]objectAtIndex:0] );
}
}
return dictDict;
}
@end
//
// PaiTou.m
// tongXunLu
//
// Created by Ibokan on 12-10-14.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "paiTou1.h"
#import "ZhongWenPaiXu.h"
#import "ChineseString.h"
#import "pinyin.h"
@implementation paiTou1
+(NSMutableArray *)zhongWenPaiXu:(NSMutableArray *)newArray{
//中文排序。
NSMutableArray *chineseStringsArray=[NSMutableArray array];
NSMutableDictionary *dictDict=[[NSMutableDictionaryalloc]init];
for(int i=0;i<[newArray count];i++){
ChineseString *chineseString=[[ChineseString alloc]init];
chineseString.string=[NSString stringWithString:[[newArray objectAtIndex:i]name] ];
if(chineseString.string==nil){
chineseString.string=@"";
}
if(![chineseString.string isEqualToString:@""]){
NSString *pinYinResult=[NSString string];
for(int j=0;j<chineseString.string.length;j++){
NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];
pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter]; }
chineseString.pinYin=pinYinResult;
}else{
chineseString.pinYin=@"";
}
[chineseStringsArray addObject:chineseString];
}
//Step2输出
// NSLog(@"\n\n\n转换为拼音首字母后的NSString数组");
// for(int i=0;i<[chineseStringsArray count];i++){
// ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
// NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
// }
//Step3:按照拼音首字母对这些Strings进行排序
NSArray *sortDescriptors = [NSArrayarrayWithObject:[NSSortDescriptorsortDescriptorWithKey:@"pinYin"ascending:YES]];
[chineseStringsArray sortUsingDescriptors:sortDescriptors];
//Step3输出
NSLog(@"\n\n\n按照拼音首字母后的NSString数组");
NSMutableSet *set=[NSMutableSetset];
for(int i=0;i<[chineseStringsArray count];i++){
ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
NSLog(@"排好的名字%@----名字的首字母String:%@",chineseString.string,[chineseString.pinYin substringToIndex:1]);
NSString *temps=[chineseString.pinYin substringToIndex:1];
NSLog(@"temps==%@",temps);
[set addObject:temps];
NSLog(@"set count ===%d set====%@",[set count],[set anyObject]);
}
NSLog(@"set count ===%d set====%@",[set count],[set allObjects]);
NSMutableArray *tempArray2=[NSMutableArray arrayWithArray:[set allObjects]];
NSLog(@"tempArray2==%@",tempArray2);
for (int k=0; k<[chineseStringsArray count]; k++) {
ChineseString *chineseString=[chineseStringsArray objectAtIndex:k];
NSString *temps=[chineseString.pinYin substringToIndex:1];
for (int m=0; m<[tempArray2 count]; m++) {
NSMutableArray *arrayLast=[[NSMutableArray alloc]init];
if ([[tempArray2 objectAtIndex:m] isEqualToString:temps]) {
[arrayLast addObject:chineseString.string];//相同首字母的数组添加名字。
[dictDict setValue:arrayLast forKey:temps];
}
}
NSLog(@"dictDict count==%d,,,,%@",[dictDict count],[dictDict objectForKey:temps] );
}
for (int i=0; i<[tempArray2 count]; i++) {
for (int j=i; j<[tempArray2 count]-1; j++) {
if ([[tempArray2 objectAtIndex:j] compare: [tempArray2 objectAtIndex:j+1]]==1) {
[tempArray2 addObject:[tempArray2 objectAtIndex:j]];
[tempArray2 removeObjectAtIndex:j];
}
}
}
return tempArray2;
}
@end
相关推荐
在iOS开发中,当涉及到中文数据的排序时,由于中文字符的复杂性,不能像英文那样简单地按照字典顺序进行排序。此时,我们需要引入特定的算法和库来处理中文字符的拼音转换,以便实现正确的排序。这篇内容将详细介绍...
在iOS开发中,经常需要对汉字或英文名称的数组进行排序和分组,以便于用户更方便地查找和浏览。这个任务通常涉及到Objective-C(OC)编程语言的使用,因此我们今天将深入探讨如何在iOS应用中实现这个功能。 首先,...
这个地址选择器涉及到的主要技术点包括:获取首字母、遍历分组、字母排序以及字母索引。以下将详细解析这些知识点。 1. 获取首字母: 在iOS中,我们通常会用到`NSString`的`substringToIndex:`方法来获取字符串的第...
以上步骤详细阐述了如何在iOS应用中实现一个按字母排序和分组的UITableView。通过这个功能,我们可以创建一个类似通讯录的应用,提供良好的用户体验。在实际项目中,还需要考虑错误处理、多语言支持以及不同设备的...
在iOS中,可以先对名字进行排序,然后遍历排序后的数组,每遇到首字母变化时创建一个新的分组: ```swift var groups: [[String]] = [] var currentGroup: [String] = [] for name in sortedNames { if current...
1、应用场景:防止请求参数被...3、【可选】针对签名数组ASCII码排序进行优化(先按照数组元素的class类型进行分组,其中的子数组是字符串类型的话,就对其进行排序之后再重新组合到新的数组中。然后再进行遍历递归拼接)
本示例的"ios-将传入的数据进行分类,排序,并添加索引.zip"着重关注如何有效地管理和展示数据。下面我们将深入探讨这个话题。 首先,让我们讨论数据分类。在iOS应用中,我们经常需要将数据按照特定的标准进行分组...
在iOS开发中,实现联系人按照首字母进行排序的功能是一个常见的需求。为了达到这个效果,开发者通常需要处理中文字符的拼音排序,确保同一姓氏的联系人能够连续显示且不被其他姓氏打断。`...
在iOS开发中,仿QQ分组Demo是一种常见的实践,它主要展示了如何实现类似QQ应用的分组功能。这个Demo的核心是构建一个用户友好的界面,其中包含可滚动的列表,每个列表项代表一个分组,点击后可以展开或收起对应的...
1.PPGetAddressBook对AddressBook框架(iOS9之前)和Contacts框架(iOS9之后)做了对应的封装处理; 2.支持获取按联系人姓名首字拼音A~Z排序(重点:已经对姓名的第二个字做了处理,排序更准确!); 3.支持获取原始顺序...
实现A-Z分组的关键在于`NSFetchedResultsController`,这是一个强大的数据管理工具,可以用来从Core Data或者任何遵循`NSFetchRequest`协议的数据源中检索数据,并且支持自动分组、排序和变更检测。在本项目中,我们...
这样可以方便地按首字母分组,并在UITableView中创建对应的Section。 2. **自定义UITableViewCell**:对于每个联系人,你需要创建一个自定义的UITableViewCell,包含联系人的名字和可能的其他信息。同时,为了实现...
4.联系人选择界面···UITableView已对联系人按照A-Z分组排序。可直接将本代码整合到项目中使用。 5.由于本人初学IOS,可能存在某些问题,请自行修改。 6.本资源仅仅收取8分,理由:代码中用到的搜索库花了我6个...
- 拖动排序:实现`UITableViewDragDelegate`和`UITableViewDropDelegate`,允许用户通过拖动行来调整顺序。 - 下拉刷新和上拉加载更多:集成第三方库如SDRefreshControl,或者自定义刷新控件。 在提供的`...
此外,`LWGPhotos`可能提供了一种分类相册的方法,可能是根据时间、地理位置或其他元数据对图片进行排序和分组。这可能涉及到解析`PHAsset`或`ALAsset`对象的元数据信息,如创建日期、位置坐标等。 在实际使用`...
接下来,为了实现字母索引,我们需要对这些名字进行排序并分组。可以使用Swift的sorted()函数,根据名字的首字母进行排序。然后,我们可以遍历排序后的数组,找出每个字母的出现位置,用这些位置作为索引条目的依据...
通过CMPhotoAlbumn,开发者可以轻松地获取到用户相册的元数据,如图片的创建日期、地理位置等,并且能够根据这些信息进行排序和过滤,提供更加智能化的相册浏览体验。 CMPhotoAlbumn还提供了丰富的自定义选项,...
可以基于谓词(Predicate)进行筛选,排序(Sort Descriptors)和分组(Fetch Segments)。 3. 更新数据:找到要更新的对象,修改属性值,再保存上下文。 4. 删除数据:获取要删除的对象,调用`deleteObject(_:)`...