天天看點

NSMutableDictionary 的使用

NSArray是有序的, NSDictionary是無序的

NSArray是通過下标通路元素, NSDictionary是通過key通路元素.

#import <Foundation/Foundation.h>

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

		// 建立 Dictionary
		NSMutableDictionary * dict1 = [NSMutableDictionary dictionary];

		NSMutableDictionary * dict2 = [NSMutableDictionary dictionaryWithCapacity:5];

		// 注意: NSDictionary 建立的時候 相同key 隻接收 最初的值 , 而NSMutableDictionary 接收 最後添加的值,因為可變.
		NSMutableDictionary * dict3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"chenglong", @"name1", @"22222", @"name1", @"lilianjie", @"name2", nil];
		NSLog(@"%@", dict3);
		// 添加鍵值對
		[dict1 setObject:@"chenglong" forKey:@"name1"];

		// 注意: NSDictionary 建立的時候 相同key 隻接收 最初的值 , 而NSMutableDictionary 接收 最後添加的值,因為可變.
		// 使用相同key , 後添加的覆寫 之前的value;
		[dict1 setObject:@"11111" forKey:@"name1"];

		[dict1 setObject:@"lilianjie" forKey:@"name2"];

		NSLog(@"%@", dict1);

		// 删除
		[dict1 removeObjectForKey:@"name1"];
		[dict1 removeAllObjects];

		// NSKeyValueCoding.h 裡的方法, 不是NSMutableDictionary裡的方法...
        // 反射的時候會用到此函數 , 且非常好用. 目前setObject 自由度更高.
        // - (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
        // key的值 隻能是 NSString 類型...
		[dict1 setValue:@"333" forKey:@"name3"];
		NSLog(@"%@", dict1);

		// 修改
        [dict1 setObject:@"liubang" forKey:@"name3"];
        // 簡寫形式
        dict1[@"name3"] = @"xiangyu";
        NSLog(@"%@",dict1);

        // 查找
        NSArray * arr = [dict3 allKeys];
        NSLog(@"%@",arr);

        if ([arr containsObject:@"name1"]) {
            NSLog(@"%@",dict3[@"name1"]);
        }
	}
	return 0;
}