189 8069 5689

iOS关于数组的那些小菜菜-创新互联

删除数组

成都创新互联公司是一家专注于网站设计制作、成都网站设计与策划设计,平湖网站建设哪家好?成都创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:平湖等地区。平湖做网站价格咨询:13518219792

  [areaArr ];

  [industryArr ];

  [natureArr ];

用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;

  }

}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:iOS关于数组的那些小菜菜-创新互联
文章地址:http://cdxtjz.cn/article/dhjgdj.html

其他资讯