好程序员学习笔记数组问题.docx
- 文档编号:18610907
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:8
- 大小:20.96KB
好程序员学习笔记数组问题.docx
《好程序员学习笔记数组问题.docx》由会员分享,可在线阅读,更多相关《好程序员学习笔记数组问题.docx(8页珍藏版)》请在冰点文库上搜索。
好程序员学习笔记数组问题
line-height:
24px">NSArray用于对象有序集合(数组)
NSSet用于对象无序集合(集合)
NSDictionary用于键值映射(字典)
以上三种集合类是不可变的(一旦初始化后,就不能改变)
以下是对应的三种可变集合类(这三种可变集合类是对应上面三种集合类的子类):
NSMutableArray
NSMutableSet
NSMutableDictionary
注:
这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int,float,double,BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。
===================NSArray====================
Orderedcollectionofobjects.Immutable(youcannotaddorremoveobjectstoitonceit’screated)
Importantmethods:
+(id)arrayWithObjects:
(id)firstObject,...;//nilterminated
-(int)count;
//得到array中的对象个数
-(id)objectAtIndex:
(int)index;//得到索引为i的对象
-(BOOL)containsObject:
(id)anObject; //当anObject出现在array中,则返回yes(实际是通过isEqual:
方法来判断)
-(unsigned)indexOfObject:
(id)anObject;
//查找array中的anObject,并返回其最小索引值。
没找到返回NSNotFound.
-(void)makeObjectsPerformSelector:
(SEL)aSelector;
-(NSArray*)sortedArrayUsingSelector:
(SEL)aSelector;
-(id)lastObject;
//得到array中最后一个对象。
如果array中没有任何对象存在,则返回nil
注:
类方法arrayWithObjects可以创建anautoreleasedNSArrayoftheitems.例如
@implementationMyObject
-(NSArray*)coolCats{
return[NSArrayarrayWithObjects:
@“Steve”,@“Ankush”,@“Sean”,nil];
}
@end
Otherconvenientcreatewithmethods(allreturnautoreleasedobjects):
[NSStringstringWithFormat:
@“Meaningof%@is%d”,@“life”,42];
[NSDictionarydictionaryWithObjectsAndKeys:
ankush,@“TA”,janestudent,@“Student”,nil];
[NSArrayarrayWithContentsOfFile:
(NSString*)path];
-----创建数组-----
NSArray*array=[[NSArrayalloc]
initWithObjects:
@One,@Two,@Three,@Four,nil];
self.dataArray=array;
[arrayrelease];
NSLog(@self.dataArraycountis:
%d,[self.dataArraycount]);
NSLog(@self.dataArrayindex2is:
%@,[self.dataArrayobjectAtIndex:
2]);
------从一个数组拷贝数据到另一数组(可变数级)-------
//arrayWithArray:
NSArray*array1=[[NSArrayalloc]
init];
NSMutableArray*MutableArray=[[NSMutableArrayalloc]
init];
NSArray*array=[NSArrayarrayWithObjects:
@a,@b,@c,nil];
NSLog(@array:
%@,array);
MutableArray=[NSMutableArrayarrayWithArray:
array];
NSLog(@MutableArray:
%@,MutableArray);
array1=[NSArrayarrayWithArray:
array];
NSLog(@array1:
%@,array1);
//Copy
//idobj;
NSMutableArray*newArray=[[NSMutableArrayalloc]
init];
NSArray*oldArray=[NSArrayarrayWithObjects:
@a,@b,@c,@d,@e,@f,@g,@h,nil];
NSLog(@oldArray:
%@,oldArray);
for(inti=0;i [oldArraycount];i++){
obj=[[oldArrayobjectAtIndex:
i]
copy];
[newArrayaddObject:
obj];
}
NSLog(@newArray:
%@,newArray);
[newArrayrelease];
//快速枚举
NSMutableArray*newArray=[[NSMutableArrayalloc]
init];
NSArray*oldArray=[NSArrayarrayWithObjects:
@a,@b,@c,@d,@e,@f,@g,@h,nil];
NSLog(@oldArray:
%@,oldArray);
for(idobjinoldArray)
{
[newArrayaddObject:
obj];
}
NSLog(@newArray:
%@,newArray);
[newArrayrelease];
//Deepcopy
NSMutableArray*newArray=[[NSMutableArrayalloc]
init];
NSArray*oldArray=[NSArrayarrayWithObjects:
@a,@b,@c,@d,@e,@f,@g,@h,nil];
NSLog(@oldArray:
%@,oldArray);
newArray=(NSMutableArray*)CFPropertyListCreateDeepCopy(kCFAllocatorDefault,(CFPropertyListRef)oldArray,kCFPropertyListMutableContainers);
NSLog(@newArray:
%@,newArray);
[newArrayrelease];
===================NSMutableArray====================
MutableversionofNSArray.
-(void)addObject:
(id)anObject;//在array最后添加anObject,添加nil是非法的.
-(void)addObjectsFromArray:
(NSArray*)otherArray;//在array最后把otherArray中的对象依次添加进去。
-(void)insertObject:
(id)anObjectatIndex:
(int)index;//在索引index处插入anObject,若index被占用,会把之后的object向后移。
-(void)removeObjectAtIndex:
(int)index; //删除index处的对象,后面的对象依次向前移。
-(void)removeObject:
(id)anObject;//删除所有和anObject相等的对象,同样使用isEqual:
作为相等比较方法.
-(void)removeAllObjects;
注:
我们不能把nil加到array中。
但有时候我们真想给array加一个空的对象,可以使用NSNull来做这件事。
如:
[myArrayaddObject:
[NSNullnull]];
-----给数组分配容量-----
//NSArray*array;
array=[NSMutableArrayarrayWithCapacity:
20];
-----在数组末尾添加对象-----
//-(void)addObject:
(id)anObject;
//NSMutableArray*array=[NSMutableArrayarrayWithObjects:
@One,@Two,@Three,nil];
[arrayaddObject:
@Four];
NSLog(@array:
%@,array);
-----删除数组中指定索引处对象-----
//-(void)removeObjectAtIndex:
(unsigned)index;
//NSMutableArray*array=[NSMutableArrayarrayWithObjects:
@One,@Two,@Three,nil];
[arrayremoveObjectAtIndex:
1];
NSLog(@array:
%@,array);
-----数组枚举-----
//1、-(NSEnumerator*)objectEnumerator;//从前向后
NSMutableArray*array=[NSMutableArrayarrayWithObjects:
@One,@Two,@Three,nil];
NSEnumerator*enumerator;
enumerator=[arrayobjectEnumerator];
idthingie;
while(thingie=[enumeratornextObject]){
NSLog(@thingie:
%@,thingie);
}
//2、-(NSEnumerator*)reverseObjectEnumerator;//从后向前
NSMutableArray*array=[NSMutableArrayarrayWithObjects:
@One,@Two,@Three,nil];
NSEnumerator*enumerator;
enumerator=[arrayreverseObjectEnumerator];
idobject;
while(object=[enumeratornextObject]){
NSLog(@object:
%@,object);
}
//3、快速枚举
NSMutableArray*array=[NSMutableArrayarrayWithObjects
One,@Two,@Three,nil];
for(NSString*stringinarray){
NSLog(@string:
%@,string);
}
-----NSValue(对任何对象进行包装)-----
//将NSRect放入NSArray中
NSMutableArray*array=[[NSMutableArrayalloc]
init];
NSValue*value;
CGRectrect=CGRectMake(0,0,320,480);
value=[NSValuevalueWithBytes:
rectobjCType:
@encode(CGRect)];
[arrayaddObject:
value];
NSLog(@array:
%@,array);
//从Array中提取
value=[arrayobjectAtIndex:
0];
[valuegetValue:
rect];
NSLog(@value:
%@,value);
----★使用NSMutableArray要防止内存泄露★------
NSObject*p1=[[NSObjectalloc]
init];
NSObject*p2=[[NSObjectalloc]
init];
NSMutableArray*objectsArray=[[NSMutableArrayalloc]
init];
[objectsArrayaddObject:
p1];
NSLog(@p1count:
%d,[p1retainCount]);//输出2,也就是执行追加对象后,对象的计数器也被加1
//[p1release];
//NSLog(@p1count:
%d,[p1retainCount]);
//同样做数组替换时
[objectsArrayreplaceObjectAtIndex:
0withObject:
p2];
NSLog(@p2count:
%d,[p2retainCount]);//输出2,同样也是2
NSLog(@p1count:
%d,[p1retainCount]);//输出1,对象p1仍然存在
//[p2release];
//NSLog(@p2count:
%d,[p2retainCount]);
//执行清空数组
[objectsArrayremoveAllObjects];
NSLog(@p2count:
%d,[p2retainCount]);//输出1,对象p2仍然存在
//[p2release];
由此可知,每次执行上面的数组操作后,要执行对象release,如上面注释中的语句,才能保证内存不泄露。
NSSet
Unorderedcollectionofobjects.
Immutable.Youcannotaddorremoveobjectstoitonceit’screated.
Importantmethods:
+setWithObjects:
(id)firstObj,...;//nilterminated
-(int)count;
-(BOOL)containsObject:
(id)anObject;
-(id)anyObject;
-(void)makeObjectsPerformSelector:
(SEL)aSelector;
-(id)member:
(id)anObject;//usesisEqual:
andreturnsamatchingobject(ifany)
NSMutableSet
MutableversionofNSSet.
+(NSMutableSet*)set;
-(void)addObject:
(id)anObject;
-(void)removeObject:
(id)anObject;
-(void)removeAllObjects;
-(void)unionSet:
(NSSet*)otherSet;
-(void)minusSet:
(NSSet*)otherSet;
-(void)intersectSet:
(NSSet*)otherSet;
NSDictionary
一个dictionary就是key-value对的集合。
key是字符串(NSString),value是对象指针。
key在整个dictionary是唯一的。
通过方法objectForKey:
来获得对应于某个key的一个或多个value(值)。
NSDictionary在创建时,其中所有的key和对应的value都存在了。
你可以访问其内容,但不可以修改。
dictionary使用hash表来实现,所以查找速度很快。
-(NSUInteger)hash -(BOOL)isEqual:
(NSObject*)obj
Importantmethods:
+dictionaryWithObjectsAndKeys:
(id)firstObject,...;
-(int)count;//返回有多少对key-value
-(id)objectForKey:
(id)key;//返回和key相关联的value。
如果没有和key相关联的value,则返回nil。
-(NSArray*)allKeys; //返回一个包含所有key的array
-(NSArray*)allValues;
-NSEnumerator*)keyEnumerator; //这个方法是从一个dictionary中得到一个key的迭代器.
Enumerators也就是iterators或enumerations.我们可以使用它来一步一步迭代出集合中的所有成员.
下面是我们可能使用它来列举所有的key-‐vaule对
NSEnumerator*e=[myDictkeyEnumerator];
for(NSString*sine){
NSLog(@keyis%@,valueis%@,s,[myDictobjectForKey:
s]);
}
注:
NSArray也有一个类似的方法得到array的成员迭代器 :
objectEnumerator
-----创建字典-----
-(id)initWithObjectsAndKeys;
NSDictionary*dictionary=[[NSDictionaryalloc]
initWithObjectsAndKeys:
@One,@1,@Two,@2,@Three,@3,nil];
NSString*string=[dictionaryobjectForKey:
@One];
NSLog(@string:
%@,string);
NSLog(@dictionary:
%@,dictionary);
[dictionaryrelease];
NSMutableDictionary
MutableversionofNSDictionary.
NSMutableDictionary是NSDictionary的子类。
创建后,允许用户添加和删除key和value。
+(NSMutableDictionary*)dictionary; //创建一个空的dictionary
-(void)setObject:
(id)anObjectforKey:
(id)key; //使用key和anObject组成一条记录添加到dictionary中
//如果key已存在,则会先移除旧的key-value,然后再添加新的key-value。
-(void)removeObjectForKey:
(id)key;
//从dictionary中删除一条记录,key以及和它对应的value
-(void)removeAllObjects;
-(void)addEntriesFromDictionary:
(NSDictionary*)otherDictionary;
-----创建可变字典-----
//创建
NSMutableDictionary*dictionary=[NSMutableDictionarydictionary];
//添加字典
[dictionarysetObject:
@OneforKey:
@1];
[dictionarysetObject:
@TwoforKey:
@2];
[dictionarysetObject:
@ThreeforKey:
@3];
[dictionarysetObject:
@FourforKey:
@4];
NSLog(@dictionary:
%@,dictionary);
//删除指定的字典
[dictionaryremoveObjectForKey:
@3];
NSLog(@dictionary:
%@,dictionary);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序员 学习 笔记 数组 问题