`
zjjzmw1
  • 浏览: 1366557 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

iOS分组排序

    博客分类:
  • iOS
 
阅读更多

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];

}

//设置sectiontitle

-(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开发中,当涉及到中文数据的排序时,由于中文字符的复杂性,不能像英文那样简单地按照字典顺序进行排序。此时,我们需要引入特定的算法和库来处理中文字符的拼音转换,以便实现正确的排序。这篇内容将详细介绍...

    IOS根据汉字(或英文)按字母排序并按首字母分组

    在iOS开发中,经常需要对汉字或英文名称的数组进行排序和分组,以便于用户更方便地查找和浏览。这个任务通常涉及到Objective-C(OC)编程语言的使用,因此我们今天将深入探讨如何在iOS应用中实现这个功能。 首先,...

    iOS省市区地址选择器:包含1.获取首字母 2.遍历分组 3.字母排序 4.字母索引等

    这个地址选择器涉及到的主要技术点包括:获取首字母、遍历分组、字母排序以及字母索引。以下将详细解析这些知识点。 1. 获取首字母: 在iOS中,我们通常会用到`NSString`的`substringToIndex:`方法来获取字符串的第...

    UItableview sort 分组IOS根据汉字(或英文)按字母排序

    以上步骤详细阐述了如何在iOS应用中实现一个按字母排序和分组的UITableView。通过这个功能,我们可以创建一个类似通讯录的应用,提供良好的用户体验。在实际项目中,还需要考虑错误处理、多语言支持以及不同设备的...

    ios-A-Z 拼音排序.zip

    在iOS中,可以先对名字进行排序,然后遍历排序后的数组,每遇到首字母变化时创建一个新的分组: ```swift var groups: [[String]] = [] var currentGroup: [String] = [] for name in sortedNames { if current...

    iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)

    1、应用场景:防止请求参数被...3、【可选】针对签名数组ASCII码排序进行优化(先按照数组元素的class类型进行分组,其中的子数组是字符串类型的话,就对其进行排序之后再重新组合到新的数组中。然后再进行遍历递归拼接)

    ios-将传入的数据进行分类,排序,并添加索引.zip

    本示例的"ios-将传入的数据进行分类,排序,并添加索引.zip"着重关注如何有效地管理和展示数据。下面我们将深入探讨这个话题。 首先,让我们讨论数据分类。在iOS应用中,我们经常需要将数据按照特定的标准进行分组...

    iOS实现联系人按照首字母进行排序的实例

    在iOS开发中,实现联系人按照首字母进行排序的功能是一个常见的需求。为了达到这个效果,开发者通常需要处理中文字符的拼音排序,确保同一姓氏的联系人能够连续显示且不被其他姓氏打断。`...

    ios-仿QQ分组Demo.zip

    在iOS开发中,仿QQ分组Demo是一种常见的实践,它主要展示了如何实现类似QQ应用的分组功能。这个Demo的核心是构建一个用户友好的界面,其中包含可滚动的列表,每个列表项代表一个分组,点击后可以展开或收起对应的...

    ios-一行代码获取通讯录联系人,并进行A~Z排序( 已对名字第二个字做排序处理 ).zip

    1.PPGetAddressBook对AddressBook框架(iOS9之前)和Contacts框架(iOS9之后)做了对应的封装处理; 2.支持获取按联系人姓名首字拼音A~Z排序(重点:已经对姓名的第二个字做了处理,排序更准确!); 3.支持获取原始顺序...

    iOS通讯录效果展示数据

    实现A-Z分组的关键在于`NSFetchedResultsController`,这是一个强大的数据管理工具,可以用来从Core Data或者任何遵循`NSFetchRequest`协议的数据源中检索数据,并且支持自动分组、排序和变更检测。在本项目中,我们...

    iOS仿QQ折叠

    这样可以方便地按首字母分组,并在UITableView中创建对应的Section。 2. **自定义UITableViewCell**:对于每个联系人,你需要创建一个自定义的UITableViewCell,包含联系人的名字和可能的其他信息。同时,为了实现...

    IOS通讯录联系人选择首字母T9拼音号码搜索排序实现

    4.联系人选择界面···UITableView已对联系人按照A-Z分组排序。可直接将本代码整合到项目中使用。 5.由于本人初学IOS,可能存在某些问题,请自行修改。 6.本资源仅仅收取8分,理由:代码中用到的搜索库花了我6个...

    IOS 自定义导航栏 和表格 学习笔记

    - 拖动排序:实现`UITableViewDragDelegate`和`UITableViewDropDelegate`,允许用户通过拖动行来调整顺序。 - 下拉刷新和上拉加载更多:集成第三方库如SDRefreshControl,或者自定义刷新控件。 在提供的`...

    ios自定义批量获取手机图片及相册LWGPhotos

    此外,`LWGPhotos`可能提供了一种分类相册的方法,可能是根据时间、地理位置或其他元数据对图片进行排序和分组。这可能涉及到解析`PHAsset`或`ALAsset`对象的元数据信息,如创建日期、位置坐标等。 在实际使用`...

    ios通讯录的字母索引

    接下来,为了实现字母索引,我们需要对这些名字进行排序并分组。可以使用Swift的sorted()函数,根据名字的首字母进行排序。然后,我们可以遍历排序后的数组,找出每个字母的出现位置,用这些位置作为索引条目的依据...

    ios-CMPhotoAlbumn.zip

    通过CMPhotoAlbumn,开发者可以轻松地获取到用户相册的元数据,如图片的创建日期、地理位置等,并且能够根据这些信息进行排序和过滤,提供更加智能化的相册浏览体验。 CMPhotoAlbumn还提供了丰富的自定义选项,...

    Core Data iOS iOS iOS

    可以基于谓词(Predicate)进行筛选,排序(Sort Descriptors)和分组(Fetch Segments)。 3. 更新数据:找到要更新的对象,修改属性值,再保存上下文。 4. 删除数据:获取要删除的对象,调用`deleteObject(_:)`...

Global site tag (gtag.js) - Google Analytics