OC通讯录(字典)
ContactPerson * p = [[ContactPerson alloc] initWithName:@"liuyongze" sex:@"男" age:23 phoneNumber:12300 address:@"xuefuxinyuan"];
ContactPerson * p1 = [[ContactPerson alloc] initWithName:@"zhangkaifang" sex:@"男" age:24 phoneNumber:12301 address:@"shiqu"];
ContactPerson * p2 = [[ContactPerson alloc] initWithName:@"zhaotiebang" sex:@"女" age:23 phoneNumber:12302 address:@"wenzhou"];
ContactPerson * p3 = [[ContactPerson alloc] initWithName:@"douxinfeng" sex:@"男" age:23 phoneNumber:12303 address:@"wanda"];
ContactPerson * p4 = [[ContactPerson alloc] initWithName:@"zhangmingen" sex:@"男" age:23 phoneNumber:12304 address:@"dongqu"];
ContactPerson * p5 = [[ContactPerson alloc] initWithName:@"niuhongxiang" sex:@"男" age:23 phoneNumber:12305 address:@"xushui"];
ContactPerson * p6 = [[ContactPerson alloc] initWithName:@"liuzhichao" sex:@"男" age:21 phoneNumber:12306 address:@"kaifeng"];
ContactPerson * p7 = [[ContactPerson alloc] initWithName:@"caoyanlin" sex:@"女" age:22 phoneNumber:12307 address:@"yunnanqujing"];
// NSMutableArray * Array = [NSMutableArray arrayWithCapacity:1];
AddressBook * book = [[AddressBook alloc] init];
[book addContactPersonDic:p];
[book addContactPersonDic:p1];
[book addContactPersonDic:p2];
[book addContactPersonDic:p3];
[book addContactPersonDic:p4];
[book addContactPersonDic:p5];
[book addContactPersonDic:p6];
[book addContactPersonDic:p7];
//添加联系人至分组
/*
NSLog(@"%@", [book contactPersonDic]);
*/
//获取某个分组下所有联系人
/*
NSArray * getGroup = [book searchContactPersonByGroupName:@"L"];
NSLog(@"%@", getGroup);
*/
//按号码搜索联系人
/*
ContactPerson * person = [book searchContactPersonByPhoneNumber:12306];
NSLog(@"%@", person);
*/
//获取某性别的所有联系人
/*
NSLog(@"%@", [book searchContactPersonBySex:@"女"]);
*/
//根据姓名删除联系人
/*
BOOL result = [book deleteContactPersonByName:@"zhangkaifang"];
NSLog(@"result = %@", result ? @"YES" : @"NO");
*/
//删除某个分组所有联系人
/*
BOOL result = [book deleteContactPersonByGroupName:@"L"];
NSLog(@"result = %@", result ? @"YES" : @"NO");
*/
ContactPerson.h
@interface ContactPerson : NSObject
{
//姓名
NSString * _name;
//性别
NSString * _sex;
//年龄
NSInteger _age;
//地址
NSString * _address;
//电话号码
NSString * _phoneNumber;
//分组名称
NSString * _groupName;
}
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
phoneNumber:(NSString *)phoneNumber address:(NSString *)address;
- (NSString *)name;
- (NSString *)phoneNumber;
- (NSString *)groupName;
- (NSString *)sex;
@end
ContactPerson.m
#import "ContactPerson.h"
@implementation ContactPerson
- (id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
phoneNumber:(NSString *)phoneNumber address:(NSString *)address;
{
self = [super init];
if (self) {
_name = name;
_sex = sex;
_age = age;
_address = address;
_phoneNumber = phoneNumber;
//如果姓名的长度大于等于1
if ([_name length] >= 1) {
NSString * spellName = [self transformMandarinToLatin:_name];
NSLog(@"spellName = %@", spellName);
//取到姓名的首字母并转大写
NSString * groupLetter = [[spellName substringToIndex:1] uppercaseString];
//给实例变量赋值
_groupName = groupLetter;
}
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name:%@, sex:%@, age:%ld, address:%@, phonenumber:%@, groupName:%@", _name, _sex, _age,_address, _phoneNumber, _groupName];
}
- (NSString *)name
{
return _name;
}
- (NSString *)phoneNumber
{
return _phoneNumber;
}
- (NSString *)groupName
{
return _groupName;
}
- (NSString *)sex
{
return _sex;
}
/*将汉字转换为不带音调的拼音
*string是要转换的字符串*/
- (NSString *)transformMandarinToLatin:(NSString *)string
{
/*复制出一个可变的对象*/
NSMutableString *preString = [string mutableCopy];
/*转换成成带音 调的拼音*/
CFStringTransform((CFMutableStringRef)preString, NULL, kCFStringTransformMandarinLatin, NO);
/*去掉音调*/
CFStringTransform((CFMutableStringRef)preString, NULL, kCFStringTransformStripDiacritics, NO);
/*多音字处理*/
if ([[(NSString *)string substringToIndex:1] compare:@"长"] == NSOrderedSame)
{
[preString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"chang"];
}
if ([[(NSString *)string substringToIndex:1] compare:@"沈"] == NSOrderedSame)
{
[preString replaceCharactersInRange:NSMakeRange(0, 4) withString:@"shen"];
}
if ([[(NSString *)string substringToIndex:1] compare:@"厦"] == NSOrderedSame)
{
[preString replaceCharactersInRange:NSMakeRange(0, 3) withString:@"xia"];
}
if ([[(NSString *)string substringToIndex:1] compare:@"地"] == NSOrderedSame)
{
[preString replaceCharactersInRange:NSMakeRange(0, 3) withString:@"di"];
}
if ([[(NSString *)string substringToIndex:1] compare:@"重"] == NSOrderedSame)
{
[preString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"chong"];
}
return preString;
}
AddressBook.h
@class ContactPerson;
@interface AddressBook : NSObject
{
//存储所有联系人的字典
NSMutableDictionary * _contactDic;
}
//添加联系人到对应的分组
- (BOOL)addContactPersonInGroup:(ContactPerson *)person;
//根据分组名返回分组下所有的联系人
- (NSArray *)searchGroupByGroupName:(NSString *)groupName;
//根据电话号码搜索联系人
- (ContactPerson *)searchContactPersonByPhoneNumber:(NSString *)phoneNumber;
//获取同性别的联系人
- (NSArray *)searchSameSexContactByGender:(NSString *)sex;
//根据姓名删除联系人
- (BOOL)deleteContactPersonByName:(NSString *)name;
//删除某个分组全部的联系人
- (BOOL)deleteGroupContactByGroupName:(NSString *)groupName;
@end
AddressBook.m
#import "AddressBook.h"
#import "ContactPerson.h"
@implementation AddressBook
- (id)init
{
self = [super init];
if (self) {
//给字典实例化
_contactDic = [NSMutableDictionary dictionaryWithCapacity:1];
//创建26个分组
for (int i = 65; i <= 90; i++) {
//生成每个分组名
NSString * key = [NSString stringWithFormat:@"%c", i];
//创建分组的数组
NSMutableArray * groupArray = [NSMutableArray arrayWithCapacity:1];
//把分组和分组名放入到字典中
[_contactDic setObject:groupArray forKey:key];
}
NSLog(@"%@", _contactDic);
}
return self;
}
//添加联系人到对应的分组
- (BOOL)addContactPersonInGroup:(ContactPerson *)person
{
if ([[person name] length] == 0 || [[person phoneNumber] length] == 0) {
NSLog(@"姓名或电话为空, 添加失败!");
return NO;
}
//根据联系人的分组名, 找到对应的分组
NSMutableArray * groupArray = [_contactDic objectForKey:[person groupName]];
[groupArray addObject:person];
NSLog(@"%@", _contactDic);
return YES;
}
//根据分组名返回分组下所有的联系人
- (NSArray *)searchGroupByGroupName:(NSString *)groupName
{
//对传入个分组名做出处理
NSString * key = [self handleKeyName:groupName];
//通过分组名从字典中取出对应分组, 并转成不可变数组
return [NSArray arrayWithArray:[_contactDic objectForKey:key]];
}
//根据电话号码搜索联系人
- (ContactPerson *)searchContactPersonByPhoneNumber:(NSString *)phoneNumber
{
//外层循环遍历字典
for (int i = 0; i < [_contactDic count]; i++) {
//取到字典的每个key
NSString * key = [[_contactDic allKeys] objectAtIndex:i];
//通过key找到对应的分组
NSMutableArray * groupArray = [_contactDic objectForKey:key];
//内层循环遍历分组数组
for (int j = 0; j < [groupArray count]; j++) {
//取出每个联系人
ContactPerson * person = [groupArray objectAtIndex:j];
//比较联系人的电话和传入的电话是否相等
if ([[person phoneNumber] isEqualToString:phoneNumber]) {
//返回联系人
return person;
}
}
}
//如果没找到, 返回nil
return nil;
}
//获取同性别的联系人
- (NSArray *)searchSameSexContactByGender:(NSString *)sex
{
//创建一个存放结果的数组
NSMutableArray * resultArray = [NSMutableArray arrayWithCapacity:1];
//外层循环遍历字典
for (int i = 0; i < [_contactDic count]; i++) {
//根据key取出每个对应的分组数组
NSMutableArray * groupArray = [_contactDic objectForKey:[[_contactDic allKeys] objectAtIndex:i]];
//内层循环遍历数组
for (int j = 0; j < [groupArray count]; j++) {
//检查每个联系人的性别和传入的性别是否一样
if ([[[groupArray objectAtIndex:j] sex] isEqualToString:sex]) {
//存入结果数组
[resultArray addObject:[groupArray objectAtIndex:j]];
}
}
}
//把数组转为不可变,并返回
return [NSArray arrayWithArray:resultArray];
}
//根据姓名删除联系人
- (BOOL)deleteContactPersonByName:(NSString *)name
{
//用于记录是否删除成功
BOOL isSuccessed = NO;
//外层遍历字典
for (int i = 0; i < [_contactDic count]; i++) {
//取出每个key
NSString * key = [[_contactDic allKeys] objectAtIndex:i];
//找到每个key对应的分组
NSMutableArray * groupArray = [_contactDic objectForKey:key];
//内层遍历分组
for (int j = 0; j < [groupArray count]; j++) {
//取出每个联系人
ContactPerson * person = [groupArray objectAtIndex:j];
//检查联系人的名字是否和传入的一样
if ([[person name] isEqualToString:name]) {
//从分组数组中删除,并把记录结果的bool值置为YES, 标记删除成功
isSuccessed = YES;
[groupArray removeObjectAtIndex:j];
j--;
}
}
}
return isSuccessed;
}
//删除某个分组全部的联系人
- (BOOL)deleteGroupContactByGroupName:(NSString *)groupName
{
//处理分组名
NSString * key = [self handleKeyName:groupName];
//找到对应的分组
NSMutableArray * groupArray = [_contactDic objectForKey:key];
//如果有该分组
if (groupArray != nil) {
[groupArray removeAllObjects];
return YES;
}
return NO;
}
//处理key
- (NSString *)handleKeyName:(NSString *)groupName
{
NSString * key = nil;
if ([groupName length] >= 1) {
key = [[groupName substringToIndex:1] uppercaseString];
}
return key;
}
@end