//删除数组
[areaArr removeAllObjects];
[industryArr removeAllObjects];
[natureArr removeAllObjects];
用NSMutableDictionary来保存“名片”记录。那么这一次,我们扩展,并使用NSMutableArray来保存“菜单”信息。
那么,我们将在AddressBook类中加入相关的属性。
AddressBook.h 文件中加入:
NSMutableArray *_bookArray;
@property(nonatomic,copy) NSMutableArray *bookArray;
在AddressBook.m 文件中加入:
@synthesize bookArray=_bookArray;生成相应的get,set方法。
修改响应初始化的方法来完成初始化:
- (id)initWithName:(NSString *)name{
self=[super init];
if (self) {
_bookName=[[NSString alloc] initWithString:name];
_bookArray=[[NSMutableArray alloc] init];
_bookDictionary=[[NSMutableDictionary alloc] init];
}
return self;
}
下面,就开始响应的NSMutableArray类的操作。
加入元素到NSMutableArray中:
- (void)addCardForArray:(AddressCard *)newCard{
[_bookArray addObject:newCard];
}
使用时:
NSString *aName=[[NSString alloc] initWithString:@"Tom"];
NSString *aEmail=[[NSString alloc] initWithString:@"Tom@yahoo.cn"];
int aSalary=1000;
NSString *bName=[[NSString alloc] initWithString:@"LiLei"];
NSString *bEmail=[[NSString alloc] initWithString:@"LiLei@yahoo.cn"];
int bSalary=1100;
NSString *cName=[[NSString alloc] initWithString:@"Lucy"];
NSString *cEmail=[[NSString alloc] initWithString:@"Lucy@yahoo.cn"];
int cSalary=900;
NSString *dName=[[NSString alloc] initWithString:@"HanMeimei"];
NSString *dEmail=[[NSString alloc] initWithString:@"HanMeimei@yahoo.cn"];
int dSalary=1300;
AddressCard *card1=[[AddressCard alloc] init];
AddressCard *card2=[[AddressCard alloc] init];
AddressCard *card3=[[AddressCard alloc] init];
AddressCard *card4=[[AddressCard alloc] init];
[card1 setName:aName andEmail:aEmail andSalary:aSalary];
[card2 setName:bName andEmail:bEmail andSalary:bSalary];
[card3 setName:cName andEmail:cEmail andSalary:cSalary];
[card4 setName:dName andEmail:dEmail andSalary:dSalary];
AddressBook *myBook=[[AddressBook alloc] init];
[myBook initWithName:@"MyBook"];
[myBook addCardForArray:card1];// 添加元素
[myBook addCardForArray:card2];
[myBook addCardForArray:card3];
[myBook addCardForArray:card4];
遍历NSMutableArray中的元素:
- (void)printBookForArray{
for (AddressCard *theCard in _bookArray) {
[theCard print];
}
}
使用时:
[myBook printBookForArray];// 输出元素
查询NSMutableArray中的元素:
- (AddressCard *)findCardForArray:(NSString *)theName{
for (AddressCard *theCard in _bookArray) {
if ([[theCard name] caseInsensitiveCompare:theName]==NSOrderedSame) {
return theCard;
}
}
return Nil;
}
使用时:
AddressCard *theCard= [myBook findCardForArray:@"Tom"];// 查找
if (theCard!=Nil) {
[theCard print];
}else{
NSLog(@"No have");
}
删除NSMutableArray中的元素(一):
- (void)removeCardForArray:(AddressCard *)theCard{
[_bookArray removeObjectIdenticalTo:theCard];
}
使用时:先查找,再删除
AddressCard *theCard= [myBook findCardForArray:@"Tom"];// 查找
if (theCard!=Nil) {
[myBook removeCardForArray:theCard];// 删除元素
}else{
NSLog(@"No have");
}
用这个方法,删除的对象为同一对象。
什么时同一对象?方法备注中已经说明。
所以,用removeObjectIdenticalTo方法,无法删除那些,属性值都相同,但是占有不同空间的对象。
不信,可以亲自试一试!
[myBook printBookForArray];// 输出元素
AddressCard *removedCard=[[AddressCard alloc] init];
// 申明一个新的Card对象,该对象与card1,具有相同的值,但是占有不同的内存
[removedCard setName:aName andEmail:aEmail andSalary:aSalary];
[myBook removeCardForArray:removedCard];// 删除元素
[myBook printBookForArray];// 输出元素
通过,输出可以说明,并没有删除啊!
那我们要问?我只需要属性值相等,就可以删除。怎么办?
那就开始下边的操作把!
删除NSMutableArray中的元素(二):
- (void)removeCardByisEqualForArray:(AddressCard *)theCard{
[_bookArray removeObject:theCard];
}
方法中提到,要重载isEqual方法。
因为我们要进行比较的元素是AddressCard;所以,在AddressCard类中重载isEqual方法:
- (BOOL)isEqual:(AddressCard *)theCard{
if ([_name isEqualToString:theCard.name]==YES &&
[_email isEqualToString:theCard.email]==YES) {
return YES;
}else{
return NO;
}
}
使用时:
[myBook removeCardByisEqualForArray:removedCard];// 删除元素
首先,调用AddressCard类中重载isEqual方法,比较元素是否相等;相等则会删除;否则不删除。
顺便提及一下:
containsObject方法和indexOfObject方法都是通过isEqual方法的比较结果来进行查找的。这两个方法,就不详细说明了。
NSMutableArray中元素的排序:
- (void) sortBySalarysForArray{
[_bookArray sortUsingSelector:@selector(compareBySalary:)];
}
在AddressCard类中,编写compareBySalary方法
- (NSComparisonResult) compareBySalary:(id)element{
if (salary>[element salary]) {
return NSOrderedDescending;
}else if (salary<[element salary]) {
return NSOrderedAscending;
}else{
return NSOrderedSame;
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。