字典嵌套解题思路总结

简介:
字典: 【通讯录思路】
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
相关文章
|
5月前
面试题 08.08:有重复字符串的排列组合
面试题 08.08:有重复字符串的排列组合
48 0
|
2月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
47 0
|
4月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
40 1
|
5月前
面试题 08.07:无重复字符串的排列组合
面试题 08.07:无重复字符串的排列组合
50 0
|
10月前
|
存储 C++
数据的存储练习题 -- (解题思路+代码)
数据的存储练习题 -- (解题思路+代码)
54 0
LeetCode题解:判断是否能拆分数组
LeetCode题解:判断是否能拆分数组
|
算法 Python
【查找算法】找到数组中只出现1次的数字(附Python实现代码)
找到数组中只出现1次的数字(附Python实现代码)
|
算法
组合排序回溯编程题集合(leetcode)
组合排序回溯编程题集合(leetcode)
|
存储 算法 前端开发
前端算法-查找是否存在重复元素
前端算法-查找是否存在重复元素