NSDictionary,NSArray,NSSet

NSArray  用于对象有序集合(相当于是数组)
NSSet  用于对象无序集合

NSDictionary用于键值映射

以上三种集合类是不可变的,一旦初始化后,就不能改变.

以下是对应的三种可变集合类(这三种可变集合类是对应上面三种集合类的子类):
NSMutableArray
NSMutableSet
NSMutableDictionary

注:这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int, float, double, BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。


NSDictionary用来实现字典集合,在给定关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。 

key-value, key-value, ..... 一系列键值对。
key(键)在整个dictionary是唯一的,通过key可以查询其对应的一个或多个value(值)。

NSDictionary使用类方法 dictionaryWithObjectAndKeys: 来创建字典;使用方法objectForKey: 来获取字典中的值。

  1. NSDictionary *dict = [NSDictionary dictionaryWithObjectAndKeys:@"just",@"firstname",   
  2.                                                                 @"code",@"lastname",  
  3.                                                                 @"xcode@apple.com",@"email",  
  4.                                                                 nil]; 
NSMutableDictionary是可变对象,可以进行添加和删除操作。 可以是用dictionaryWithCapacity: (这里的容量也只是个参考值,表示对大小的限制)或 dictionary 来创建可变字典。

  1. //NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];  
  2. NSMutableDictionary *dict = [NSMutableDictionary dictionary];  
  3.   
  4. [dict setObject:@"John" forKey:@"Firstname"];  
  5. [dict setObject:@"Doe" forKey:@"Lastname"];  
  6. [dict setObject:@"info@objectgraph.com" forKey:@"Email"];  
  7.   
  8. NSLog(@"%@", dict);  
  9.   
  10. NSArray *keys = [dict allKeys];  
  11.    
  12. // values in foreach loop  
  13. for (NSString *key in keys) {  
  14.     NSLog(@"%@ is %@",key, [dict objectForKey:key]);  
  15. }  
  16.   
  17. [dict removeObjectForKey:@"Email"];



NSArray和NSMutableArray

  1. NSArray *array;  
  2. array=[NSArray  arrayWithObjects:@"0-asd",@"1-fds",@"2-哈咯",@"3-个人",nil];  
  3. //数组的长度  
  4. NSLog(@"数组长度%d",array.count);  
  5. //通过索引取得对象  
  6. for(int i=0;i<array.count;i++)  
  7. {  
  8.     NSString *secondStr=[array objectAtIndex:i];  
  9.     NSLog(secondStr,nil);  
  10. }  
  11. //高速枚举法取得对象,Objective-C2.0开始支持,  
  12. for(NSString *str in array)  
  13. {  
  14.     NSLog(str,nil);  
  15. }  
  16. //对象的追加于删除  
  17. //创建空数组  
  18. NSMutableArray *MutArray=[NSMutableArray array];  
  19. //追加对象  
  20. [MutArray addObject:@"A"];  
  21. [MutArray addObjectsFromArray:array];  
  22. //插入对象  
  23. NSString *thstr=@"插入值";  
  24. [MutArray insertObject:thstr atIndex:4];  
  25. //替换对象  
  26. [MutArray replaceObjectAtIndex:2 withObject:@"替换"];  
  27. //删除所有对象  
  28. //[Mutarray removeAllObjects];  
  29. //删除最后的对象  
  30. [MutArray removeLastObject];  
  31. //删除索引为Index的对象  
  32. [MutArray removeObjectAtIndex:0];  
  33. //删除所有于object同值的对象  
  34. [MutArray removeObject:@"0-asd"];  
  35. //删除数组中所有与object等价的对象  
  36. [MutArray removeObjectIdenticalTo:thstr];  
  37. //删除数组中所有与数组array包含相同的元素  
  38. [MutArray removeObjectsInArray:array];  
  39. NSLog(@"%@",MutArray); 
//Copy

    //id obj;
    NSMutableArray *newArray = [[NSMutableArray alloc] init];
    NSArray *oldArray = [NSArray arrayWithObjects:
                         @"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];

    NSLog(@"oldArray:%@",oldArray);
    for(int i = 0; i < [oldArray count]; i++)
    {        
        obj = [[oldArray objectAtIndex:i] copy];
        [newArray addObject: obj];
    }
    //     
    NSLog(@"newArray:%@", newArray);
    [newArray release];

NSSet是Object-c中使用的最少的集合类,它就如同在一个池子里放进所需要的元素。

它是无序的集合类,并且所存储的所有对象只能有唯一一个,不能重复。

它与NSArray的区别在于,它是无序的,它根据HASH算法查找特定元素,效率比遍历高。

// creating a set

    NSSet *set=[NSSet set];

    NSSet *set1=[NSSet setWithArray:stuArray];

    NSSet *set2=[NSSet setWithObject:stu1];

       NSSet *set3=[NSSet setWithObject:stuArray];

    NSSet *set4=[NSSet setWithObjects:stu2,stu3,stuArray, nil];

    NSSet *set5=[NSSet setWithSet:set1];

 

    NSLog(@"set4.count=%d",[set4 count]);

    for (NSString *sss in set4.allObjects)

    {

        NSLog(@"ssss = %@",sss);

    }

    



setWithObjects创建包含给定的对象列表的集合
+ (id)setWithObjects:(id)firstObj ...

isEqualToSet比较两个集合是否相等
- (BOOL)isEqualToSet:(NSSet *)otherSet

containsObject判断给定的对象是否在集合中
- (BOOL)containsObject:(id)anObject

addObject给集合添加一个对象,如果已有这个对象则不会添加
- (void)addObject:(id)object

removeObject删除集合中给定的对象
- (void)removeObject:(id)anObject

intersectSet取两个集合的交集,如果接收集合中的成员不是给定集合的成员,则从接受集合中删除这个成员。
- (void)intersectSet:(NSSet *)otherSet

unionSet取两个集合的并集,如果给定集合中的成员不是接收集合的成员,则将这个成员添加到接收集合中。
- (void)unionSet:(NSSet *)otherSet

  //集合比较、修改
    NSSet *set1=[NSSet setWithObjects:@"s1",@"s2",@"s3",@"s4",nil];
    NSMutableSet *set2=[NSMutableSet setWithObjects:@"s1",@"s2",@"s3",@"s4",nil];
    NSLog(@"List set1");
    for (NSString *element in set1) {
        NSLog(@"%@",element);
    }
    if ([set1 isEqualToSet:set2]) {
        NSLog(@"set1 is equal to set set2");
    } else {
        NSLog(@"set1 is not equal to set set2");
    }
    if ([set1 containsObject:@"s1"]) {
        NSLog(@"set1 contains s1");
    } else {
        NSLog(@"set1 not contains s1");
    }
    [set2 addObject:@"s5"];
    [set2 removeObject:@"s3"];
    NSLog(@"List set2");
    for (NSString *element in set2) {
        NSLog(@"%@",element);
    }
 
    //集合交集、并集
    NSMutableSet *set3;
    set3=[NSMutableSet setWithObjects:@"s1",@"s3",@"s5",nil];
    [set3 intersectSet:set1];
    NSLog(@"135 intersectSet 1234");
    for (NSString *element in set3) {
        NSLog(@"%@",element);
    }
    set3=[NSMutableSet setWithObjects:@"s1",@"s3",@"s5",nil];
    [set3 unionSet:set1];
    NSLog(@"135 unionSet 1234");
    for (NSString *element in set3) {
        NSLog(@"%@",element);
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值