NSDictionary

字典相当于Java中的Map, 有key和value

//
//  main.m
//  NSDictionary
//
//  Created by rayln on 13-9-6.
//  Copyright (c) 2013年 rayln. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSDictionary *dic = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"a",@"b",@"c",@"d", nil] forKeys:[NSArray arrayWithObjects:@"k1",@"k2",@"k3",@"k4", nil]];
        NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"a",@"b",@"c",@"d", nil] forKeys:[NSArray arrayWithObjects:@"k1",@"k2",@"k3",@"k4", nil]];
        //包含的元素个数
        [dic count]; //返回4
        //比较2个字典是否相等
        [dic isEqualToDictionary:dic2];
        //根据key取出value	
        [dic objectForKey:@"k1"]; //输出a
        //字典写入文件中
        [dic writeToFile:@"/Users/rayln/Desktop/text.txt" atomically:YES];
        //从字典读取数据
        [NSDictionary dictionaryWithContentsOfFile:@"/Users/rayln/Desktop/text.txt"];
        //返回所有的key
        [dic allKeys];
        //返回所有的value
        [dic allValues];
        
#pragma mark - 用法
        //另一种声称dictionary方法
        NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"v6", @"k6",
                              @"v1", @"k1",
                              @"v1", @"k2",
                              @"v1", @"k3",
                              @"v4", @"k4", nil];
        //返回包含value的所有key
        [dic3 allKeysForObject:@"v1"]; //输出[k1, k2, k3]
        //对应多个key找到多个value, notFoundMarker参数是表示如果找不到对应的key,则value值由notFoundMarker替代
        [dic3 objectsForKeys:[NSArray arrayWithObjects:@"k1", @"k2", @"k5", nil] notFoundMarker:@"notfound"]; //输出[v1, v1, notfound]
        
#pragma mark - 字典遍历
        //遍历所有key
        for (id key in dic3) {
            NSLog(@"%@", key);
            
        }
        
        //key的迭代器
        NSEnumerator *enumKey = [dic3 keyEnumerator];
        id key = nil;
        while (key = [enumKey nextObject]) {
            NSLog(@"key=%@", key);
        }
        
        //对象迭代器 不演示了!
        [dic3 objectEnumerator];
        
        //block遍历- stop表示是否停止循环 如果stop=YES, 则停止循环
        [dic3 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            NSLog(@"block-%@=%@",key,obj);
        }];
        
#pragma mark - 字典排序
        //根据value进行排序,返回排好序的key的Array
        NSArray *arr = [dic3 keysSortedByValueUsingSelector:@selector(compare:)]; //返回[k3, k2, k1, k4, k6]
        //block排序,也是根据value进行排序,返回排好序的key的Array
        arr = [dic3  keysSortedByValueUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
            NSComparisonResult *result = [obj1 compare:obj2];
            return result;
        }];//返回[k3, k2, k1, k4, k6]
        
        NSLog(@"%@", arr);
        
#pragma mark - 内存管理
        //当字典有对象时,字典中每个对象都会做一次retain操作,当字典释放时就会做一次release操作
        
    }
    return 0;
}

	

猜你喜欢

转载自rayln.iteye.com/blog/1938369