+ (id)contachWithName:(NSString *)name sex:(NSString *)sex phoneNumber:(NSString *)phoneNumber adress: (NSString *)adress{ return [[Contach alloc]initWithName:name sex:sex phoneNumber:phoneNumber adress:adress]; }
实现description方法:
- (NSString *)description
{ return [NSString stringWithFormat:@"%@-%@-%@-%@", _name,_sex,_phoneNumber,_adress];}
====================================================================================
第一个:添加联系人方法:
第一步先考虑姓名为空或者电话为空不能添加联系人的情况做一个if判断返回即可
第二步在允许添加情况下先获得分组名(分组名为姓名首大写字母)NSString *groupName = [person.name substringToIndex: 1]; 判断分组是否为空,为空直接初始化并添加联系人 group = [NSMutableArray arrayObject:person]; 再添加联系人分组 [_adressDic setObject:group forKey : groupName];
如果group分组不为空,说明分组存在可以直接向分组中添加联系人[group addObject : person];
最后打印验证
第二个:获取某个分组下的所有联系人并排序
首先判断分组是否存在,不存在return nil;
分组存在:
if(group != nil){
NSUinteger count = [group count];
for(int i = 0; i < count - 1 ; i ++){
for(int j = 0; j < count - i - 1 ; j ++){
Contach *p1 = group[j];
Contach *p2 = group[j + 1];
if ([p1.name compare:p2.name] == NSOrderedDescending){
[group exchangeObjectAtIndex:j withObjectAtIndex : j + 1]//交换变量元素}}}
return group;}else{return nil; }}
第三个:获取所有女性联系人
首先准备一个数组接收找出的女性联系人,需要遍历两次,第一次遍历字典取出key值对应的分组;第二次遍历分组,取出person.sex is EqualToString @"Women" 的联系人,最后放在准备好的可变数组里 [women addObject:person]; 返回women; return women;即可具体如下:
- (NSMutableArray *)getAllWomenPerson{
//准备一个数组用来存储所有的女性联系人
NSMutableArray *women = [NSMutableArray array];
//遍历整个联系人字典
for (NSString *groupName in _addressDic) {
//取出Key值对应的分组
NSMutableArray *group = [_addressDic objectForKey:groupName];
//遍历分组
for (Contach *person in group) {
if ([person.sex isEqualToString:@"women"]) {
[women addObject: person]; }}}
return women; }
第三个:根据姓名删除联系人
要想删除姓名的联系人,需要知道联系人所在的分组,所以要先获取分组名
NSString *groupName =[name substringFromIndex:1];
然后获取分组中所有联系人组成新的可变数组
NSMutableArray *group = [_addressDic objectForKey:groupName];
再对分组元素个数做判断
if ([group count] == 1) {
Contach *p = [group lastObject];//如果只有一个元素,第一个或最后一个是我们要删除的,因为只有一个元素;
if ([p.name isEqualToString:name]) {
//此时直接用字典删除对应的分组名即可
[_addressDic removeObjectForKey:groupName];
}else{
//定义一个用来存储找到联系人的对象
Contach *p1 = nil;
//遍历分组
for (Contach *person in group) {
if ([person.name isEqualToString:name]) {
p = person;}}
[group removeObject:p1];
}
}作者:韩俊强