@interface AddressPerson : NSObject
@property NSString *name;//姓名
@property NSString *address;//地址
@property NSString *email;//邮箱
@property NSString *phoneNumber;//电话号码
@property NSString *grouping;//分组
//初始化
- (id)initWithName:(NSString*)name andAddress:(NSString *)address andEmail:(NSString*)email andPhoneNumber:(NSString *)phoneNumber andGrouping:(NSString*)grouping;
//便利构造器
+ (AddressPerson*)WithName:(NSString*)name andAddress:(NSString *)address andEmail:(NSString*)email andPhoneNumber:(NSString *)phoneNumber andGrouping:(NSString*)grouping;
//判断邮箱是否合法
+ (BOOL) validateEmail:(NSString *)email;
@end
#import "AddressPerson.h"
@implementation AddressPerson
- (NSString*)description
{
return [[NSString alloc]initWithFormat:@"%@,%@,%@,%@,%@",_name,_address,_email,_phoneNumber ,_grouping];
}
//初始化
- (id)initWithName:(NSString*)name andAddress:(NSString *)address andEmail:(NSString*)email andPhoneNumber:(NSString *)phoneNumber andGrouping:(NSString*)grouping
{
if (self = [super init]) {
_name = name;
_address = address;
_email = email;
_phoneNumber = phoneNumber;
_grouping = grouping;
}
return self;
}
//便利构造器
+ (AddressPerson*)WithName:(NSString*)name andAddress:(NSString *)address andEmail:(NSString*)email andPhoneNumber:(NSString *)phoneNumber andGrouping:(NSString*)grouping
{
AddressPerson *addressPerson = [[AddressPerson alloc]initWithName:name andAddress:address andEmail:email andPhoneNumber:phoneNumber andGrouping:grouping];
return addressPerson;
}
//判断邮箱是否合法
+ (BOOL) validateEmail:(NSString *)email
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}
@end
#import <Foundation/Foundation.h>
@class AddressPerson;
@interface AddressBook : NSObject
@property NSMutableArray *allContact;//所有的联系人
@property NSMutableDictionary *groupContactDic ;//管理通讯录的字典
//添加联系人
- (void)addNewAddressContact:(AddressPerson*)contact;
//通讯录输出所有的联系人。要求:按照姓名排序、姓名相同按照邮箱地址进行排序
- (void)getAllContact;
//从通讯录中根据电话号码搜索联系人
- (void)phoneOfNumber:(NSString*)phoneNumber;
//从通讯录中根据姓名搜索联系人
- (void)nameOfNumber:(NSString*)name;
@end
#import "AddressBook.h"
#import "AddressPerson.h"
@implementation AddressBook
- (id)init
{
if (self = [super init]) {
//初始化分组联系人的字典对象
//1.创建26个键值
NSArray *keyArray = [[NSArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];
//2.创建26个键值对应的value
NSMutableArray *valueArray = [[NSMutableArray alloc]initWithCapacity:10];
for (int i = 0 ; i < [keyArray count]; i ++) {
NSMutableArray *groupArray = [[NSMutableArray alloc]init];
[valueArray addObject:groupArray];
}
//3.初始化字典
_groupContactDic = [[NSMutableDictionary alloc]initWithObjects:valueArray forKeys:keyArray];
//初始化所有人联系人数组
_allContact = [[NSMutableArray alloc]initWithCapacity:10];
}
return self;
}
//添加联系人
- (void)addNewAddressContact:(AddressPerson*)contact
{
if ([contact name]!=nil&&[AddressPerson validateEmail:[contact email]]) {
NSMutableArray *array = [_groupContactDic objectForKey:[contact grouping]];
[array addObject:contact];
[_allContact addObject:contact];
NSLog(@"添加成功");
}else{
NSLog(@"添加失败");
}
}
//通讯录输出所有的联系人。要求:按照姓名排序、姓名相同按照邮箱地址进行排序
- (void)getAllContact
{
NSArray *newArray = [_allContact sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
AddressPerson *contact = (AddressPerson*)obj1;
AddressPerson *contact1 = (AddressPerson*)obj2;
if ([[contact name] compare:[contact1 name]]!=0) {
return [[contact name] compare:[contact1 name]];
}
else {
return [[contact email ] compare:[contact1 email]];
}
} ];
NSLog(@"%@",newArray);
}
//从通讯录中根据电话号码搜索联系人
- (void)phoneOfNumber:(NSString*)phoneNumber
{
for (id object in _allContact) {
if ([[object phoneNumber] compare:phoneNumber]==0) {
NSLog(@"%@", [object description]);
}
}
}
//从通讯录中根据姓名搜索联系人
- (void)nameOfNumber:(NSString*)name
{
for (id object in _allContact) {
if ([[object name] compare:name]==0) {
NSLog(@"%@", [object description]);
}
}
}
@end
//第一题请创建一个数组,初始化为@‘’123“等。使用block语法,进行数组的排序。并输出内容
/*
//NSArray *array = @[@"123",@"21",@"33",@"69",@"108",@"256"];
NSArray *array = [[NSArray alloc]initWithObjects:@"123",@"21",@"33",@"69",@"108",@"256", nil];
NSArray *newArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *str = (NSString*)obj1;
NSString *str1 = (NSString*)obj2;
return [obj1 compare:obj2];
}];
NSLog(@"%@",newArray);
*/
/*===============================================================*/
//第二题 建议的通讯录
AddressPerson *contact1 = [[AddressPerson alloc]initWithName:@"Thang san" andAddress:@"123" andEmail:@"124325srf@sufdh.com" andPhoneNumber:@"ast235346645" andGrouping:@"T"];
AddressPerson *contact2 = [[AddressPerson alloc]initWithName:@"Lhang san" andAddress:@"325" andEmail:@"13hhgf@sgfh.com" andPhoneNumber:@"ast235346645" andGrouping:@"L"];
AddressPerson *contact3 = [[AddressPerson alloc]initWithName:@"Li san" andAddress:@"1er" andEmail:@"1sdfrf@sufgddsh.com" andPhoneNumber:@"ast235346645" andGrouping:@"L"];
AddressPerson *contact4 = [[AddressPerson alloc]initWithName:@"Wangg san" andAddress:@"er" andEmail:@"1rfgm5srf@sufbh.cnew" andPhoneNumber:@"ast235346645" andGrouping:@"W"];
AddressPerson *contact5 = [[AddressPerson alloc]initWithName:@"Fang san" andAddress:@"1sdg" andEmail:@"1243asdf@sufdh.comw" andPhoneNumber:@"ast235346645" andGrouping:@"F"];
AddressBook *book = [[AddressBook alloc]init];
[book addNewAddressContact:contact1];
[book addNewAddressContact:contact2];
[book addNewAddressContact:contact3];
[book addNewAddressContact:contact4];
[book addNewAddressContact:contact5];
[book getAllContact];
// [book phoneOfNumber:@"ast235346645"];
// [book nameOfNumber:@"Zhang san"];