Objective-C集合總結

來源:互聯網
上載者:User

標籤:des   style   blog   color   使用   os   io   資料   

Objective-C裡面的集合主要包括:NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary

首先,NSString,NSArray和NSDictionary都是不可變的,一經分配空間,長度是固定的。另外3個類是可變的,初始化後還可以動態增加空間,長度不固定。這幾個類在初始化和相關操作上有一定的相似性,放在一起對比學習,能加深理解。數組和字典有一些特殊的地方需要注意,後面進行說明,先從初始化開始:

字串-NSString

字面量建立:NSString *string = @"this is a string"; 

格式化建立:+ (id) stringWithFormat:(NSString *) format,...;

例如:NSString * str = [NSString stringWithFormat:@"Your age is %d,and your height is %d",26,140];

從前面的+號可以看出,這是一個類方法

1、比較大小

方法一:- (BOOL) isEqualToString:(NSString *) aString

用來比較接收方和作為參數傳遞過來的字串,返回一個BOOL(YES或NO)來表示兩個字串的內容是否相同,例如:

NSString *thing1 = @"hello 5";NSString *thing2 = [NSString:stringWithFormat:@"hello %d",5];if([thing1:isEqualToString:thing2]){    NSLog(@"they are the same!");  }

thing1==thing2與[thing1 isEqualToString:thing2]的區別,==運算子只判斷thing1和thing2的指標數值是否相同,即:他們是否是同一事物;後者用來判斷兩個字串的內容是否相同

方法二:- (NSComparisonResult) compare: (NSString *) aString option: (NSStringCompareOptions) mask;

compare方法將接收對象和傳遞過來的字串逐個進行比較,返回一個NSComparisonResult(枚舉類型)來表示比較結果。NSComparisonResult的定義如下:

enum{    NSOrderedAscending = -1,    NSOrderedSame,    NSOrderedDescending};typedef NSInteger NSComparisonResult

參數option是一個掩位碼,可以通過位或來委任標記,常用的標記如下:

  • NSCaseInsensitiveSearch:不區分大小寫自負。
  • NSLiteralSearch:進行完全比較,區分大小寫字元。
  • NSNumbericSearch:比較字串的字元個數,而不是字串值。如果沒有這個選項,100會排在99的前面。

     如果你相比較字串,需要忽略大小寫並按字元個數進行排序,那麼應該這麼做:

if([thing1 compare:thing2 option:NSCaseInsensitiveSearch | NSNumerbicSearch] == NSOrderedSame){    NSLog(@"They match!");}
 2、字串包含

起始處包含(以aString開頭):- (BOOL) hasPrefix: (NSString *) aString;

結尾處包含(以aString結尾):- (BOOL) hasSuffix: (NSString *) aString;

內部包含(內部含有aString):- (NSRange) rangeOfString: (NSString *) aString;

rangeOfString方法返回的是一個NSRange結構體,封裝來字串匹配的位置和能夠匹配的字元個數,例如:

NSString *fileName = @"draft-chapter.pages";NSRange range = [fileName rangeOfString:@"chapter"];//返回的range.location為6,range.length為7

如果傳遞的參數在接收字串中沒有找到,那麼range.location則等於NSNotFound。

可變字串-NSMutableString

NSMutableString是NSString的子類,長度可變,類似於c#中的StringBuilder,聲明如下:

+ (id) stringWithCapacity: (NSUInteger) capacity;

這裡的capacity只是個建議值,實際字串大小並不限於所提供的容量。

1、添加字串:
  • - (void) appendString: (NSString *) aString;
  • - (void) appendFormat: (NSString *) format,...;

例如:

NSMutableString *string = [NSMutableString stringWithCapacity:50];[string appendString:@"Hello there "];[string appendFormat:@"human %d!",66];//最後string的值為:"Hello there human 66!"
2、刪除字串

方法:- (void) deleteCharactersInRange:(NSRange) aRange;

NSMutableString *friends = [NSMutableString stringWithCapacity:50];[friends appendString:@"James BethLynn Jack Evan"];NSRange jackRange = [friends rangeOfString:@"jack"];jackRange.length++;[friends deleteCharactersInRange:jackRange];//最終結果:"James BethLynn Evan"

NSMutableString是NSString的子類,所以任何使用NSString的地方都可以用NSMutableString來代替,例如,我們可以添加格式化字串:

NSMutableString *string = [NSMutableString stringWithFormat:@"jo%dy",2];  //string的值為"jo2y"

不可變數組-NSArray

NSArray是一個Cocoa類,它比C、C++數組強大的地方在於,NSArray可以儲存任意類型的對象,比如字串、自訂類型甚至其他數組或字典,但是請記住:NSArray只能儲存對象,像int ,char,double等基礎資料型別 (Elementary Data Type)不能直接儲存,需要通過轉換成對象才能加入數組。另外,NSArray是不可變數組,一旦建立它的長度就固定下來來,不能添加和刪除任何元素,當然數組中包含的對象是可以改變的,只不過數組對象本身是一直都不會變的。

NSArray的建立:

  • 1、NSArray *array = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",nil];
  • 2、NSArray *array1 = [NSArray arrayWithArray:array];(以現用的數組建立數組)
  • 3、NSArray *array2 = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];  //對象列表必須以nil結尾
  • 4、NSArray *array3 = @[@"one",@"two",@"three"]; //以字面量的方式建立時,不必在結尾處特意補上nil 

相關方法:

  - (NSUInteger) count;   //擷取數組中對象的個數

  - (id) objectAtIndex:(NSUInteger)index;  //擷取指定索引處的對象

  還可以通過字面量訪問數組,例如:id *myObject = array[1];我們可以利用計數和取值來遍曆數組中的對象:

//方式一NSUInteger count = [array count];for(NSUInteger i = 0; i < count; i++){     NSLog(@"index %d has %@.", i, [array objectAiIndex:i]);  }//方式二for(NSUInteger j = 0; j < count; j++){    NSLog(@"index %d has %@", j, array[j]);}

NSArray還有一種特別的建立方式,就是通過切分字串,方法的聲明如下:

- (NSArray) componentsSeparatedByString:(NSString *) separater;

例如:NSString *string = @"oop:ack:bork:greeble:ponies";

   NSArray *chunks = [string componentsSeparatedByString:@":"];

還可以反過來用指定字串來合并NSArray中的元素來建立字串,例如:

   string = [chunks componentsJoinedByString:@"+"]; //string的內容為:"oop+ack:bork+greeble+ponies"

可變數組-NSMutableArray

NSMutableArray的建立:+ (id) arrayWithCapacity:(NSUInteger) numItems;

與NSMutableString中的stringWithCapacity方法一樣,這裡的容量只是一個建議值,當超出容量時可變數組能夠動態擴充空間。

尾部添加對象:- (void) addObject:(id) anObject;

指定索引處插入對象: - (void) insertObject:(id) anObject atIndex:(NSUInteger) index;  //後面的元素向後移

刪除指定索引處的對象: - (void) removeObjectAtIndex:(NSUInteger) index;  

刪除全部對象:- (void) removeAllObjects;

NSMutableArray *array = [NSMutableArray arrayWithCapacity:17]; //建立for(NSInteger i = 0; i < 4; i++) //在尾部添加四個對象{    Tire *tire = [Tire new];    [array addObject:tire];}
Tire *t = [Tire new];
[array insertObject:t atIndex:1]; //在第二個位置處添加一個對象[array removeObjectAtIndex:1]; //刪除索引為1的對象,即:第二個對象
[array removeAllObjects];
不可變字典-NSDictionary

   和c#中的字典一樣,Objective-c中的NSDictionary能在給定關鍵字(通常是一個NSString字串)下儲存一個數值,然後可以通過這個關鍵詞來尋找相應的資料。相對於數組,字典採用的是鍵查詢的最佳化方式,它可以立即找出要尋找的資料,而不需要遍曆整個數組,對於頻繁的查詢和大型資料集來說,使用字典比數組要快得多。

  像NSString和NSArray一樣,NSDictionary也是不可變的,在建立新的NSDictionary時,就要提供該字典所儲存的全部對象和關鍵字。

  基本操作:

  1、建立方式一:通過字面量方式,使用類似@{key:value,...}的方法來定義

  2、建立方式二:通過dictionaryWithObjectsAndKeys方法,該方法接受對象和關鍵字交替出現的序列,以nil值作為終止符號,定義如下:

  + (id) dictionaryWithObjectsAndKeys:(id) firstObject,...

  3、擷取字典中的資料方式一:使用objectForKey,接收一個關鍵字,通過該關鍵字來擷取對應的資料,該方法定義如下:

  - (id) objectForKey:(id) aKey;

  4、擷取字典中的資料方式二:dictionary[key];

  範例程式碼如下:

 1 Tire *tire1 = [Tire new]; 2 Tire *tire2 = [Tire new]; 3 Tire *tire3 = [Tire new]; 4 Tire *tire4 = [Tire new]; 5 NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys:tire1,@"front-left",tire2,@"front-right",tire3,@"back-left",tire4,@"back-right",nil]; 6 //字面量方式 7 NSDictionary *tires = @{@"front-left":tire1,@"front-right":tire2,@"back-left":tire3,@"back-right":tire4}; 8  9 //擷取方式一10 Tire *tire = [tires objectForKey:@"front-left"];11 //擷取方式二12 Tire *tire = tires[@"front-left"];
可變字典-NSMutableDictionary

  可以通過向NSMutableDictionary類發送dictionary訊息來建立新的NSMutableDictionary對象,也可以通過dictionaryWithCapacity:方法來建立帶初始大小的可變字典對象,這個方法的定義如下:

  + (id) dictionaryWithCapacity:(NSUInteger) numItems;

  與之前提到過的NSMutableString和NSMutableArray一樣,在這裡,字典的容量只是一個建議值,而不是對其大小的限制。

  可以通過setObject:forKey:的方法來為字典添加元素,定義如下:

  - (void) setObject:(id) andObject forKey:(id) aKey;

  如果對字典中已有的關鍵字使用setObject:forKey:方法,那麼這個方法將會用新值替換原有的資料。如果想刪除一些關鍵字,可使用removeObjectForKey:方法,定義如下:

  - (void) removeObjectForKey:(id) aKey;

  範例程式碼如下:  

 1 //建立詞典對象,初始化長度為10 2 NSMutableDictionary *tires = [NSMutableDictionary dictionaryWithCapacity:10]; 3 // NSMutableDictionary *tires = [NSMutableDictionary dictionary]; 4  5 //動態添加元素 6 [tires setObject:tire1:forKey:@"front-left"]; 7 [tires setObject:tire2:forKey:@"front-right"]; 8 [tires setObject:tire3:forKey:@"back-left"]; 9 [tires setObject:tire4:forKey:@"back-right"];10 11 //刪除元素12 [tires removeObjectForKey:@"back-left"];

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.