这三个是最常用的吧,注意是对象在前,key在后
Accessing Keys and Values
allKeys返回所有的key, allValues返回所有的value
NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"man1",@"11",@"wom",@"22",@"kid",@"33",@"man1",@"44",nil]; NSArray *array = [dic2 allKeysForObject:@"man1"]; NSLog(@"%@",array);
由上代码可知,allKeysForObject是返回指定对象中所有这个和这个对象配对的key(一个字典或者是java中的map key是唯一的 可是value却不是).
Enumerating Dictionaries
enumerateKeysAndObjectsWithOptions:usingBlock:
以上几种的方法主要都是获取这个字典里的值,相当于for吧 不过比for效率高,毕竟官方封装的方法NSDictionary *nsd = [NSDictionary dictionaryWithObjectsAndKeys:@"萌妹子",@"1",@"御姐",@"2",@"女汉子",@"3", nil]; [nsd enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ - %@" ,key,obj); }];
NSEnumerator *en = [nsd keyEnumerator];
id string; while (string = [en nextObject]) { NSLog(@"%@-%@",string,[nsd objectForKey:string]); }
先说 – keyEnumerator – objectEnumerator 这是获取字典中的全部的key 或者 object 注意他们是 NSEnumerator 类型的
这个类型只有一个方法 nextObject 它我觉得就是把对象按链表的方式存起来 让你一个个读.
enumerateKeysAndObjectsWithOptions:usingBlock:
然后就是这两个 它俩其实一样 只不过第二个比第一个少一个参数
NSSortOptions 这是个枚举值 ,它的作用是设定取KEY的顺序 (NSSortConcurrent 是正序 ,NSSortStable 反序)
enum {
NSSortConcurrent = (1UL << 0),
NSSortStable = (1UL << 4),
};
(这儿有了个疑问,字典存放不是无序的么 怎么还分正反,后来想了想,可能是为了在同一个方法或者这个字典的生命周期里确定吧,
毕竟这个字典创建后,那些键值对还是按照某个顺序存在的);
同样 这是一个可变的字典 那么它就和java中的map基本相同了
Creating and Initializing a Mutable Dictionary
Adding Entries to a Mutable Dictionary
Removing Entries From a Mutable Dictionary
上面的几个方法都没什么好说的,不得不说苹果的命名机制很好,见名知意.
2 NSSet 和 NSMutableSet
NSSet 就是一个只能存放唯一值的集合,不知道OC中是在呢么实现的,java是判断hash码,我估计oc也差不多.
它一样的创建后 无法改变
不过set是随机存储,那么也可以理解为随机了,可是同一个生命周期内取到的都是同一个值)
见代码!
NSSet *set = [NSSet setWithObjects:@"123",@"456",@"789", nil]; NSArray *ns = [set allObjects]; id na = [set anyObject]; BOOL a = [set containsObject:@"123"]; NSLog(@"%@,%@,%d",ns,na,a);
输出是2013-08-08 20:45:01.846 NSSetAndNSDic[1886:303] (
123,
456,
789
),123,1
想判断是否包含某个对象还有一个方法
– member:
NSString *b = [set member:@"456"]; NSLog(@"%@",b);
这就是我觉得比较重要的几个 剩下的见名知意
NSMutableSet *set = [NSMutableSet setWithObjects:@"123",@"456",@"789", nil]; NSMutableSet *set2 = [NSMutableSet setWithObjects:@"abc",@"def",@"hij", nil]; NSMutableSet *set3 = [NSMutableSet setWithObjects:@"hjk",@"789", nil]; [set unionSet:set2]; NSLog(@"%@",set); [set minusSet:set2]; NSLog(@"%@",set); [set minusSet:set3]; NSLog(@"%@",set);
输出:
NSDictionary *nsd2 = [NSDictionary dictionaryWithObjectsAndKeys:@"萌妹子",@"1",@"御姐",@"2",@"女汉子",@"3", nil]; for (id key in nsd2) { NSLog(@"%@",[nsd objectForKey:key]); }
没什么好说的,知道有这个简便用法,和for一样