黑马程序员技术交流社区

标题: Objective-C中的集合类【2】 [打印本页]

作者: ZXY66452    时间: 2015-12-6 21:03
标题: Objective-C中的集合类【2】
二、字典(Dictionary)

        字典就像java中的Map, 里面存的是键值对,key的值是不可以重复的。字典有可改变的和不和不可改变之分

            1.不可变字典NSDictionary

                (1)字典的创建和获取字典的值

//不可变字典的初始化
NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
id value = [dictionay objectForKey:@"key1"];
NSLog(@"key1 => %@", value)
           代码运行结果:
1
2014-08-01 19:09:41.319 HelloOC[1658:303] key1 => value1
            (2).字典的遍历
                字典的遍历方法是通过字典里的-(NSArray *)allKeys获取所有的key存入数组中然后通过遍历数组获取key对应的value,封装成函数如下:
//封装遍历字典的函数
void dictionary_display(id dictionay)
{
    NSArray *keys = [dictionay allKeys];
    for (id obj in keys) {
        NSLog(@"%@ => %@", obj, [dictionay objectForKey:obj]);
    }
}
        2.可变字典NSMutableDictionary
            在使用可变字典NSMutableDictionary时可以先给可变字典初始化一个空间,如果不够的话会自动增加
            给可变字典分配初始化空间: +(id) dictionaryWithCapacity : (NSUInteger) num;
            给可变字典添加对象:-(void) setObject(id) obj  forKey(id) aKey;
            根据关键字删除对象:-(void) removeObjectForKey : (id) aKey;
            删除字典中的所有数据: -(void) removeAllObjects;
                代码如下:
NSMutableDictionary *mulDictionary = [NSMutableDictionary dictionaryWithCapacity:3];
//添加值
[mulDictionary setObject:@"value1" forKey:@"key1"];
[mulDictionary setObject:@"value2" forKey:@"key2"];
[mulDictionary setObject:@"value3" forKey:@"key3"];
[mulDictionary setObject:@"value4" forKey:@"key4"];
//通过键删除值
[mulDictionary removeObjectForKey:@"key4"];
dictionary_display(mulDictionary);
                运行结果:
2014-08-01 20:28:37.504 HelloOC[1786:303] key3 => value3
2014-08-01 20:28:37.504 HelloOC[1786:303] key1 => value1
2014-08-01 20:28:37.504 HelloOC[1786:303] key2 => value2
       三.Set集合
    ​    ​Set集合类就像我们数学中的集合一样是无序和不重复的,Set中也只能存放对象,也分为可变集合NSMutableSet和不可变集合NSSet。
    ​    ​    ​1.不可变集合NSSet
    ​    ​    ​    ​(1)NSSet的初始化和其他集合类一样也有其对应的便利初始化方法和便利构造器,
    ​    ​    ​    ​    ​    ​便利初始化方法:-(id) initWithObjects: (id) firstObject, ...;
    ​    ​    ​    ​    ​    ​便利构造器:+(id) setWithObjects: (id) firstObject, ...;
    ​    ​    ​    ​(2)NSSet中也有-(NSUInteger) count 来获取元素的对象
    ​    ​    ​    ​(3) 获取集合中的元素
    ​    ​    ​    ​    ​    获取全部的集合元素,以数组的形式返回:-(NSArray *) allObjects;
    ​    ​    ​    ​    ​    ​随进获取集合中的元素:-(id) anyObject;
    ​    ​    ​    ​(4)判断两个Set是否相同 : - (BOOL) isEqualToSet: (NSSet *) otherSet;
    ​    ​    ​    ​(5)判断一个元素是否在本集合中 -(BOOL) member: (id) obj;
    ​    ​    ​Demo:    ​
//set集合的操作
//便利初始化函数
NSSet *set1 = [[NSSet alloc] initWithObjects:@"aa", @"bb", @"cc", @"dd", nil];
//便利构造器
NSSet *set2 = [NSSet setWithObjects:@"AA", @"BB", @"CC", nil];
//获取集合中元素的个数
int count = (int) [set1 count];
NSLog(@"set1里面的元素的个数为:%d", count);
//遍历集合:把set集合转换为数组然后进行遍历
NSArray *setToArray = [set2 allObjects];
array_display(setToArray);
//随机获取Set中元素
id element = [set1 anyObject];
NSLog(@"随机获取其中的值%@", element);
//比较两个Set是否相等
if ([set1 isEqualToSet:set2] == NO) {
    NSLog(@"set1 != set2");
}









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2