字典嵌套解题思路总结

简介:
字典: 【通讯录思路】
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
相关文章
|
8月前
面试题 08.08:有重复字符串的排列组合
面试题 08.08:有重复字符串的排列组合
60 0
|
7月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
54 1
|
8月前
面试题 08.07:无重复字符串的排列组合
面试题 08.07:无重复字符串的排列组合
62 0
|
存储 C++
数据的存储练习题 -- (解题思路+代码)
数据的存储练习题 -- (解题思路+代码)
76 0
|
机器学习/深度学习 存储
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
90 0
力扣83删除排序链表中的重复元素:代码实现+思路分析+方法总结(快慢指针法&递归)
力扣83删除排序链表中的重复元素:代码实现+思路分析+方法总结(快慢指针法&递归)
67 0
|
存储
【C】逆序字符串(俩种递归思路)
【C】逆序字符串(俩种递归思路)
100 0
【C】逆序字符串(俩种递归思路)
|
机器学习/深度学习 人工智能 算法
leetcode-每日一题565. 数组嵌套(标记图和并查集)
这题告诉我们数组内的数字是0-N-1,且不会重复,我们可以把A[i] , A[A[i]]…看成一个环,数组可以被分成多个环,我们只需计算多个环中的最大长度即可
85 0
leetcode-每日一题565. 数组嵌套(标记图和并查集)
|
存储
二分法查找解题原理与运用方式
二分法查找解题原理与运用方式
267 0
二分法查找解题原理与运用方式