免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
OC 集合

數(shù)組的定義:

數(shù)組:數(shù)組是有序?qū)ο蟮募?用來儲存對象的有序列表(需注意,不能儲存基本數(shù)據(jù)類型,只能儲存對象)。對象:類的具體實現(xiàn)

和字符串一樣,數(shù)組也有可變數(shù)組和不可變數(shù)組之分,可變數(shù)組是不可變數(shù)組的子類,使用數(shù)組前得先創(chuàng)建數(shù)組對象

NSArray類:(不可變數(shù)組)

1.數(shù)組的初始化:

  實例方法:NSArray* array=[[NSArray alloc]initWithObject:@"one",@"tow",nil];

  類方法:NSArray * array=[NSArray arrayWithObject:@"one",@"tow",nil];

2.獲得數(shù)組里元素的個數(shù)

  -(NSUInteger)count;

  例如:int count=[array count];

3.獲得數(shù)組中得元素:

  -(id)objectAtIndex:(NSUInteger)index;

  例如:NSString * srt=[array objectAtIndex:1];//str的值為@"tow"

NSArray類使用注意事項:

1.數(shù)組越界,訪問NSArray時,最好檢查一下索引是否越界

2.數(shù)組會對加入其中的對象引用計數(shù)加一(內(nèi)存管理方面)

3.不能再中間加nil,nil是數(shù)組結(jié)束的標(biāo)示符

 

NSMutableArray類:(可變數(shù)組)

NSMutableArray是NSArray的子類,所以NSArray的一些方法對MutableArray也適用

1.可變數(shù)組的初始化:

  實例方法:-(id)initWithCapacity:(NSUInteger)numItems;

  例如:NSMutableArray* array=[[NSMutableArray alloc]initWithCapacity:12];

  類方法:+(id)initWithCapacity:(NSUInteger)numItems;

2.增加對象:

  -(void)addObject:(id)anObject;//在最后面添加

  例如:[array addObject:@"three"];

  指定位置添加

  -(void)insetObject:(id)anObject atIndex:(NSUInteger)index;//在index處插入一個anObject對象,在index后的對象后移一位

3.刪除對象:

  -(void)removeAllObject;//刪除數(shù)組內(nèi)的全部對象

  -(void)removeLastObject;//刪除數(shù)組的最后一個對象

  -(void)removeObjectIndex:(NSUInteger)index;//刪除指定對象

4.替換:

  -(void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;//在index位置替換成anObject對象

數(shù)組的遍歷:

  for(int i=0;i>[array count];i++) { NSL(@"%@",[array objectAtIndex:i]); }

 

字典NSDictionary(不可變):

首先想一下這幾個問題,什么是字典?為什么要用字典?字典和數(shù)組的區(qū)別是什么?

  字典:就是關(guān)鍵字及其定義所構(gòu)成的集合。使用字典查找信息比數(shù)組快的多。字典的儲存方式跟數(shù)組不一樣,它是采用鍵查詢的優(yōu)化存儲方式,它可以通過關(guān)鍵字立刻查詢出來要找的數(shù)據(jù),而不用去遍歷整個集合去查找。字典和字符串、數(shù)組一樣也有可變和不可變之分

  

1.創(chuàng)建:

  -(id)dictionaryWithObjectAndKeys:(id)obj,..,..;

  例如:Student * stu1=[Student new];

     Student * stu2=[Student new];

     NSDictionary * dict=[NSDictionary dictionaryWithObjectAndKeys:stu1,@"peter",stu2,@"andy",nil];

     //說明,參數(shù)和鍵都是成對出現(xiàn),最后以nil為結(jié)束標(biāo)志

2.查找:

  -(id)objectForKey:(id)aKey;//使用鍵來尋找索要查找的對象

  例如:id student=[dict objectForKey:@"peter"];//得到“peter”鍵的對象

3.注意事項:

  創(chuàng)建字典時,字典的鍵和數(shù)值都要是id(即對象)類型的;

  創(chuàng)建字典時,傳進的參數(shù)是鍵值對,即鍵和對象要成對出現(xiàn),最后不要忘記加nil;

  字典的關(guān)鍵字(鍵)不要重復(fù),如果重復(fù)了,后面的值就會覆蓋前面的。

NSMutableDictionary類(可變):

  可變字典類是不可變字典的子類,所以上面所用的方法對NSMutableDictionary也適用

1.創(chuàng)建:

  +(id)dictionaryWithCapacity:(NSUInteger)num;

  例如:NSMutableDictionary* dict=[NSMutableDictionary dictionaryWithCapacity:5]

  //說明:創(chuàng)建了初始化大小為5個鍵值對的可變字典,5只是初始大小,用以提高效率,超過5也會繼續(xù)往后添加

2.添加:

  -(void)setObject:(id)obj forKey(id)aKey;//關(guān)鍵字和對象成對出現(xiàn)

  例如:Student *stu1=[Student new];

     Student *stu2=[Student new];

     NSMutableDictuinary* dict2=[NSMutableDictionary dictionaryWithCapacity:2];

     [dict2 setObject:stu1 forKey:@"y"]; 

     [dict2 setObject:stu2 forKey:@"k"];

     //注意:如果你添加的關(guān)鍵字在原來字典已經(jīng)有了,那么你添加的會覆蓋原來的關(guān)鍵字的值

3.刪除:

  -(void)removeObjectForKey:(id)aKey;//根據(jù)關(guān)鍵字刪除對應(yīng)的數(shù)據(jù)

  例如:對上面新建的字典操作:[dict2 removeObjectForKey:@"y"];結(jié)果stu1對象從字典中移除

  -(void)removeAllObject;//刪除所有數(shù)據(jù)

  

4.字典的遍歷:

  由于字典是以鍵值對的形式儲存數(shù)據(jù),所以無法直接適用索引來遍歷字典中得元素,但字典中有一個方法allKeys:

  -(NSArry*)allKeys;//得到字典的所有key值,返回一個數(shù)組中,通過返回的數(shù)組得到相應(yīng)的對象,不可變和可變字典遍歷方法一樣

  適用for循環(huán)遍歷存放所有的keys的每一個Key,然后再根據(jù)key得到相對于的對象

  Student* stu1=[Student new];

 

      Student* stu2=[Student new];

      NSDictionary* dict=[NSDictionary dictionaryWithObjectsAndKeys:stu1,@"m",stu2,@"k", nil];

      NSArray* keys=[dict allKeys];

      id key,value;

      for (int i=0; i<[keys count]; i++) {

          key=[keys objectAtIndex:i];

          value=[dict objectForKey:key];            

          NSLog(@"key:%@,value:%@",key,value);

      }

 

Set集合(NSSet,不可變):

  NSSet集合跟數(shù)組差不多,但Set集合不能存放相同的對象,它是一組單值對象的集合,被存放對進集合中得數(shù)據(jù)的無序的。

1.NSSet的初始化:

  -(id)initWithObjects:(id)firstObject,...,nil;

  +(id)setWithObjects:(id)firstObject,...,nil;

  例如:NSSet* set=[[NSSet alloc]initWithObjects:@"one",@"two",nill;

2.NSSet的個數(shù):

  -(NSUInteger)count;

3.NSSet中得元素:

  -(NSArray*)allObject;//得到集合中所有元素,以數(shù)組的形式返回

  -(id)anyObject;//隨機獲得集合中某個元素

4.NSSet的一些判斷方法:

  -(BOOL)isEqualToSet:(NSSet*)otherSet;//判斷和另一集合otherSet是否相等

  -(BOOL)member:(id)obj;//判斷本集合是否包含對象obj

5.需要注意的:

  Set集合不能存放相同對象,元素都是無序存放的

  它和數(shù)組不同的是:

  NSArray:有序幾集合,儲存元素在一個整塊的內(nèi)存中并按序排列

  NSSet:無序集合,散列存儲。

  在搜索一個對象時,NSSet比NSArray效率高,主要是因為NSSet用到一個算法hash(散列,直譯為哈希),NSSet直接通過hash找到想要找的元素,而數(shù)組則要遍歷整個數(shù)組,顯然效率要低。

NSMutableSet(可變):

1.NSMutableSet的創(chuàng)建:

  -(id)initWithCapacity:(NSUInteger)numItems;//實例方法

  +(id)setWithCapacity:(NSUInteger)numtems;//類方法

  同樣numtems是初始大小,并不限制集合大小

2.增加集合的元素:

  -(void)addObject:(id)object;

  //[set addObject:student];

3.刪除集合中得元素

  -(void)removeAllObject;//刪除集合中所有元素

  -(void)removeObject:(id)object;//刪除集合中object對象

  例如:[set removeObject:student];

 

數(shù)組數(shù)據(jù):

 上面所說得集合不能存放基本數(shù)據(jù)類型,那么如何把基本數(shù)據(jù)類型封裝成對象呢?NSNumber類型就是解決這一問題

NSNumber類:

1.創(chuàng)建封裝方法

  +(NSNumber)numberWithChar:(char)value;//封裝一個char數(shù)據(jù)類型

  +(NSNumber)numberWithInt:(int)value;//封裝一個int數(shù)據(jù)類型

  +(NSNumber)numberWithFloat:(float)value;//封裝一個單精度數(shù)據(jù)類型

  +(NSNumber)numberWithBOOL:(BOOL)value;//封裝一個雙精度數(shù)據(jù)類型

  以上是所列舉的類方法

  -(id)initWithChar:(char)value;

  -(id)initWithInt:(int)value;

  -(id)initWithFloat:(float)value;

  -(id)initWithBOOL:(BOOL)value;

  比如:NSNumber *number=[NSNumber numberWith:3];//把int類型的3封裝成一個NSNumber;

  上面是封裝基本類型的,那結(jié)構(gòu)體該這么封裝呢?用NSValue

NSValue的創(chuàng)建及使用: 

  +(NSValue*)valueWithBytes:(const void*)value objCType:(const char*)type;

  第一個參數(shù)是機構(gòu)體地址,第二個參數(shù)是用來描述這個數(shù)據(jù)類型的字符串,用來說明結(jié)構(gòu)體中得實體的類型和大小,用@encode編譯器指令可以接受數(shù)據(jù)類型的名字并為你生成適合的字符串。

  NSRect rect=NSMakeRect(4,4,100,100);

  NSValue* value=[NSValue valueWithBytes:&rect objCType:@encode(NSRect)];

  [array addObject:value];

  這樣我們就把一個結(jié)構(gòu)體封裝成一個NSValue類型的對象

從NSValue中獲取值

  -(void)getValue:(void *)value;

  調(diào)用getValue時,要傳遞的是要存儲這個數(shù)值的變量地址,類似scanf()函數(shù)

  比如:NSValue *value=[array objectAtIndex:0];

     NSRect rect1;

     [value getValue:&rect1];

     這樣就把NSValue轉(zhuǎn)換成結(jié)構(gòu)體的結(jié)果通過rect1的地址賦值給rect1.

 

NSNull

  nil放進集合里面代表著結(jié)束,那如何要把空值存放到集合里面?

  cocoa提供了一個NSNull類,用這個類來封裝nil空值。

  +(NSNull*)null;

  比如:[array addObject:[NSNull null] ];

       id nullValue=[array objectAtIndex:0];

       if (nullValue==[NSNull null]) {

           //如果空值的花,做一些操作

        }

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
編程語言學(xué)習(xí)筆記:ObjC語言 (5) Foundation框架
Objective-C 高性能的循環(huán)
IOS中數(shù)組的使用(NSArray, NSSet, NSDictionary)
Objective
如何在iOS中使用Block
從今天開始學(xué)習(xí)iOS開發(fā)(iOS 7版)--實現(xiàn)一款A(yù)pp之Foundation框架的使用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服