iOS关于数组的那些小菜菜

//删除数组

[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:@"[email protected]"];

int aSalary=1000;

NSString *bName=[[NSString alloc] initWithString:@"LiLei"];

NSString *bEmail=[[NSString alloc] initWithString:@"[email protected]"];

int bSalary=1100;

NSString *cName=[[NSString alloc] initWithString:@"Lucy"];

NSString *cEmail=[[NSString alloc] initWithString:@"[email protected]"];

int cSalary=900;

NSString *dName=[[NSString alloc] initWithString:@"HanMeimei"];

NSString *dEmail=[[NSString alloc] initWithString:@"[email protected]"];

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;

}

}

时间: 2024-10-21 12:57:53

iOS关于数组的那些小菜菜的相关文章

关于js数组的一道小考题

网上看到的一道关于js数组的小考题,借此学习练习一下,也是拿来作为博客开篇之作吧! 题目如下: 给定一个随机数组,数组可能包含数组(也就是说数组元素可能为数组).要求用js实现一个函数,返回该数组中所有元素,重复的要求去掉.例如:数组[2,3,[4,6,[3,8]],12,10],返回结果为:[2,3,4,6,8,12,10]. 我的答案如下:(额外增加了排序) 1 var arr = [2,3,[4,6,[3,8,[15,16,[17,18,[1,2,3,[19,20]]]]],[13,14]

iOS中数组遍历的方法及比较

数组遍历是编码中很常见的一种需求,我们来扒一拔iOS里面都有什么样的方法来实现,有什么特点. 因为iOS是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的. 本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了. NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; 第一种方法

IOS 应用 退出的一个小方法

AppDelegate * app=(AppDelegate *)[[UIApplication sharedApplication]delegate]; UIWindow *window = app.window; [UIView animateWithDuration:1.0f animations:^{ window.alpha = 0; window.frame = CGRectMake(window.bounds.size.width/2.0, window.bounds.size.w

(iOS)开发中收集的小方法

1.颜色转变成图片 - (UIImage *)createImageWithColor:(UIColor *)color {     CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);     UIGraphicsBeginImageContext(rect.size);     CGContextRef context = UIGraphicsGetCurrentContext();     CGContextSetFillColorWithCo

关于数组的一些小算法

1.已知两个有序数组A,B,将它们合并为一个有序数组.利用到的是归并算法的思想. int* combine(int a[],int n1,int b[],int n2) { int i = 0,j = 0,k = 0; int *c = new int[n1+n2]; while(i<n1&&j<n2) //依次比较a,b数组当前元素,将小的元素放前面,下标后移 { if(a[i]<=b[j]) c[k++] = a[i++]; else c[k++] = b[j++];

一个ios工程相关的配置小问题解决介绍,gdata xml解析相关

在我们ios的开发中gdataxml是一个常用的开源实现,很多第三方的库在实现里也会加入它的源码.我们在使用此类库或者直接使用gdataxml库时,切记要在工程中引入libxml2这个框架,否则编译会报错,提示类似下面: Undefined symbols for architecture armv7: "_xmlDocDumpMemory", referenced from: xxx 引入该框架问题即可解决. 一个ios工程相关的配置小问题解决介绍,gdata xml解析相关,码迷,

关于iOS去除数组中重复数据的几种方法

关于iOS去除数组中重复数据的几种方法 在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的.代码: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-

iOS 判断数组是否为空

有人说可以用([array count]==0 )来判断是否为空,都是坑,如果array为空的话,执行count就会直接报错,程序崩溃退出. 正确判断NSArray是否为空的方法:用 (!array) if(array != nil && ![array isKindOfClass:[NSNullclass]] && array.count !=0){ //执行array不为空时的操作 } 这样才是iOS判断数组是否为空的准确方式.

IOS 根据数组的个数对UIButton进行重复或循环使用

//设置一个view view = [[UIView alloc] initWithFrame:CGRectMake(0, 38, 320, 30)]; view.backgroundColor = [UIColor lightGrayColor]; [self.view addSubview:view]; for (int i=0; i<5; i++) { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; butt