字典嵌套解题思路总结

字典: 【通讯录思路】
1、首先建立Contach类,类中包含基本的姓名,性别,电话号码,通讯地址,进行setter,getter方法实现并实现进行初始化- (id)initWithName : 和遍历构造器+ (id)contachWithName :的方法;并实现description方法,否则打出来是地址
注意:+ (id)contachWithName : 的实现:

+ (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];}

====================================================================================

2、建立管理联系人的字典AdressBook的类;
实例:可变字典NSMutableDictionary *_addressDic;
注意:.h引入的是@class Contach;  而.m实现部分引入的才是头文件:#import “Contach.h”
首先要初始化字典:
- (instancetype)init {if(self = [super init])    _adressDic = [NsMutableDictionary dictionary]; }   
                return  self;        }

第一个:添加联系人方法:

第一步先考虑姓名为空或者电话为空不能添加联系人的情况做一个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];

        }

    }作者:韩俊强

欢迎分享本文,转载分享请注明出处!
更多精彩内容: http://weibo.com/hanjunqiang
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值