Object C學習筆記12-集合

Object C學習筆記12-集合

2014-03-08 17:25 by 賀臣, 262 閱讀, 0 評論, 收藏, 編輯html

  這裏講到的集合是指Set集合,其實Array也是一種類型的集合。在Object C中提供了兩個集合類NSSet和NSMutableSet。其實NSSet和NSArray性質同樣,都是用於存儲對象的。算法

  然而Array集合和Set集合仍是有區別的,主要是在於Set集合的搜索速度要比Array速度要快,NSArray和NSMutableArray 是一種有序集合,其存儲的值在內存中是連續的,而NSSet和NSMutableSet是無需集合,在內存中的存儲方式是不連續的,在NSSet,NSMutableSet採用了hash算法,你懂的!數組

  

  一. NSSet集合ide

    剛纔上面也簡單的介紹了一下NSSet集合,NSSet集合是一種無序集合,使用hash算法來查找存儲的值。經過hash算法能夠直接查找到存儲的地址,而有序集合須要遍歷全部元素來查找數據。post

    (1) 初始化NSSet集合學習

NSNumber *num=[NSNumber numberWithInteger:2345];
NSSet *set=[NSSet setWithObjects:@"abc",@"efg", num,nil];

    由於NSSet集合只能存儲對象類型,若是要存儲int,char,double 等基礎類型,必須將這些轉化爲對象類型才能存儲到NSSet集合中。第一行代碼將數字轉化爲NSNumber數字對象。this

    使用setWithObjects 來初始化一個NSSet集合,一樣和NSArray同樣,須要使用nil來標識集合的結束。spa

    (2) 使用count獲取NSSet集合的長度3d

NSNumber *num=[NSNumber numberWithInteger:2345];
        NSSet *set=[NSSet setWithObjects:@"abc",@"efg", num,nil];
        NSLog(@"%d",[set count]);

    上面的代碼輸出結果爲3,說明集合set中包含三個元素,注意最後的nil不包含在其中。同時NSSet能夠同時存儲不一樣類型的對象,上面的代碼中就包含了NSString和NSNumber兩種類型對象。code

    (3) 使用containObject判斷是否包含某個元素

NSNumber *num1=[NSNumber numberWithInteger:23];
bool flag=[set containsObject:num1];
NSLog(@"%i",flag);

    這段代碼中從新聲明瞭一個對象num1,containObject方法用於判斷NSSet中是否包含特定的對象,返回值爲bool。若是使用如上代碼則則返回爲NO,輸出爲0

     (4) 使用objectEnumerator將集合轉化爲迭代器

複製代碼
NSEnumerator *enumr=[set objectEnumerator];
        NSObject *item=[enumr nextObject];
        while(item!=nil){
            NSLog(@"%@",item);
            item=[enumr nextObject];
        }
        
        for(NSObject *obj in set){
            NSLog(@"%@",obj);
        }
複製代碼

    使用set調用objectEnumerator方法只會,就將集合轉化爲NSEnumerator類,而NSEnumerator類有一個很重要的方法nextObject,用於獲取迭代器的下一個元素。直到迭代到最後一個元素。

    (5) 元素的比較

複製代碼
//比較兩個集合
        NSSet *setItems1=[NSSet setWithObjects:@"123", @"234", @"456",nil];
        NSSet *setItem2=[NSSet setWithObjects:@"123",@"234", nil];
        NSSet *setItem3=[NSSet setWithObjects:@"123",@"234", @"456",nil];
        
        bool flag1=[setItems1 isEqualToSet:setItem2];
        bool flag2=[setItems1 isEqualToSet:setItem3];
        NSLog(@"flag1=%i",flag1);
        NSLog(@"flag2=%i",flag2);
        
        bool flag3=[setItem2 isSubsetOfSet:setItems1];
        NSLog(@"flag3=%i",flag3);
        
        bool flag5=[setItems1 isSubsetOfSet:setItem2];
        NSLog(@"flag5=%i",flag5);
        
        bool flag4=[setItem2 intersectsSet:setItem3];
        NSLog(@"flag4=%i",flag4);
複製代碼

    使用方法isEqualToSet用於判斷兩個集合元素是否同樣,返回bool值。

    - (BOOL)isSubsetOfSet:(NSSet *)otherSet; 判斷前者集合是否是後者的子集。在上面的例子中能夠看到兩個集合調用的主從關係,這裏是有區別的。

    - (BOOL)intersectsSet:(NSSet *)otherSet;判斷兩個集合是否有交集,也就是兩個集合是否有相同的元素。

 

  二. NSMutableSet動態集合

    NSMutableSet和以前的NSMutableArray數組同樣,是能夠動態添加和刪除元素的。NSMutableSet是NSSet的一個子類。

    (1) setWithCapacity用於初始化NSMutableSet的容量,這裏要注意容量並不等於存儲的元素數量

NSMutableSet *muSet=[NSMutableSet setWithCapacity:10];

    以上代碼就是初始化了一個容量爲10的NSMutableSet集合,當往NSMutableSet中添加新的元素對象時候,若是數量超過10不會數組越界,由於NSMutableSet是當存儲滿以後容量自動擴充。

    (2) 往集合中添加對象元素

複製代碼
NSMutableSet *muSet=[NSMutableSet setWithCapacity:10];
        
        NSNumber *number1=[NSNumber numberWithInteger:344];
        NSNumber *number2=[NSNumber numberWithInt:34];
        NSNumber *number3=[NSNumber numberWithInt:545];
        [muSet addObject:number1];
        [muSet addObject:number2];
        [muSet addObject:number3];
        
        NSArray *nsArray=[NSArray arrayWithObjects: [NSNumber numberWithInt:2],[NSNumber numberWithInt:3],[NSNumber numberWithInt:4], nil];
        [muSet addObjectsFromArray:nsArray];
        
        for(NSNumber *item in muSet){
            NSLog(@"^^^^^^%d",item);
        }
複製代碼

    addObject 方法用於往NSMutableSet集合中添加元素,每次只能添加一個元素。

    而addObjectsFromArray方法則用於將一個數組添加到NSMutableSet集合中

    (3) 刪除集合中的元素

複製代碼
[muSet removeObject:[NSNumber numberWithInt:2]];
        for(NSNumber *item in muSet){
            NSLog(@"-----^%d",item);
        }
        [muSet removeAllObjects];
        int leng=[muSet count];
        NSLog(@"00000-%d",leng);
複製代碼

    使用removeObject方法用於刪除NSMutableSet集合中的元素,在以上代碼中刪除一個值爲2的NSNumber對象。

    而使用removeAllObjects方法則用於刪除NSNutableSet中的全部的元素,最後一行代碼輸出的結果0。

    (4)其餘方法介紹

    - (void)unionSet:(NSSet *)other;用於向集合中添加另一個集合的全部元素

    - (void)minusSet:(NSSet *)other;用於刪除other中包含的元素

    

  Set集合與Array比較相似,更多方法能夠查看官方API文檔。 

 

轉載於:http://www.cnblogs.com/qingyuan/p/3587342.html

相關文章
相關標籤/搜索