您的位置:首页 > 其它

NSSet和NSArry的区别&NSSet的一般用法

2016-01-08 12:52 316 查看
引用自:http://zhidao.baidu.com/link?url=uD25s5OdnfmnNzvEUcYl3eCuSNE20BytMTgTQ_L42YM3B0DWWCR3Fj3gBStI09GKBwJT1obbGSnPWgwDlr-7X1qByLjjn8VORAjMygfxJZ3
http://blog.csdn.net/ms2146/article/details/8657011

1.NSSet和NSArry的区别:

NSSet到底什么类型,其实它和NSArray功能性质一样,用于存储对象,属于集合; NSSet , NSMutableSet类声明编程接口对象,无序的集合,在内存中存储方式是不连续的,不像NSArray,NSDictionary(都是有序的集合)类声明编程接口对象是有序集合,在内存中存储位置是连续的;NSSet和我们常用NSArry区别是:在搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash(散列,也可直译为哈希);开发文档中这样解释:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.比如你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置;同样,当你要访问A时,一个hash过程就能找到A存储的位置.而对于NSArray,若想知道A到底在不在数组中,则需要便利整个数组,显然效率较低了;NSSet,NSArray都是类,只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型.

2.NSSet的一般用法

#import <Foundation/Foundation.h>      int main(int argc, const char * argv[])  {        @autoreleasepool {                    NSSet *set1 = [NSSet setWithObjects:@"a", @"b", @"c", @"d", nil];          NSSet *set2 = [[NSSet alloc] initWithObjects:@"1", @"2", @"3", nil];          NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];          NSSet *set3 = [NSSet setWithArray:array];                    NSLog(@"set1 :%@", set1);          NSLog(@"set2 :%@", set2);          NSLog(@"set3 :%@", set3);                    //获取集合个数          NSLog(@"set1 count :%d", set1.count);                    //以数组的形式获取集合中的所有对象          NSArray *allObj = [set2 allObjects];          NSLog(@"allObj :%@", allObj);                    //获取任意一对象          NSLog(@"anyObj :%@", [set3 anyObject]);                    //是否包含某个对象          NSLog(@"contains :%d", [set3 containsObject:@"obj2"]);                              //是否包含指定set中的对象          NSLog(@"intersect obj :%d", [set1 intersectsSet:set3]);                    //是否完全匹配          NSLog(@"isEqual :%d", [set2 isEqualToSet:set3]);                    //是否是子集合          NSLog(@"isSubSet :%d", [set3 isSubsetOfSet:set1]);                                        NSSet *set4 = [NSSet setWithObjects:@"a", @"b", nil];          NSArray *ary = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];          NSSet *set5 = [set4 setByAddingObjectsFromArray:ary];          NSLog(@"addFromArray :%@", set5);                                                  NSMutableSet *mutableSet1 = [NSMutableSet setWithObjects:@"1", @"2", @"3", nil];          NSMutableSet *mutableSet2 = [NSMutableSet setWithObjects:@"a", @"2", @"b", nil];          NSMutableSet *mutableSet3 = [NSMutableSet setWithObjects:@"1", @"c", @"b", nil];                    //集合元素相减          [mutableSet1 minusSet:mutableSet2];          NSLog(@"minus :%@", mutableSet1);                    //只留下相等元素          [mutableSet1 intersectSet:mutableSet3];          NSLog(@"intersect :%@", mutableSet1);                    //合并集合          [mutableSet2 unionSet:mutableSet3];          NSLog(@"union :%@", mutableSet2);                    //删除指定元素          [mutableSet2 removeObject:@"a"];          NSLog(@"removeObj :%@", mutableSet2);                              //删除所有数据          [mutableSet2 removeAllObjects];          NSLog(@"removeAll :%@", mutableSet2);                }      return 0;  }  日志:[plain] view plaincopy set1 :{(      d,      b,      c,      a  )}   set2 :{(      1,      2,      3  )}   set3 :{(      a,      b,      c  )}   set1 count :4   allObj :(      1,      2,      3  )   anyObj :a   contains :0   intersect obj :1   isEqual :0   isSubSet :1   addFromArray :{(      3,      b,      1,      4,      2,      a  )}   minus :{(      1,      3  )}   intersect :{(      1  )}   union :{(      b,      1,      2,      a,      c  )}   removeObj :{(      b,      1,      2,      c  )}   removeAll :{(  )}  
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: