OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/41809719,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的。

一、NSDirctionary类

//
//  main.m
//  19_NSDictionary
//
//  Created by jiangwei on 14-10-12.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import <Foundation/Foundation.h>

//由键值对key-value构成的数据集合
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1.---------------------字典的创建
        NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil];
        NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil];

        //第一个元素:key:@"zhang" value:array1
        //第二个元素:key:@"li"  value:array2
        NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil];
        NSLog(@"%@",dict);

        //存放一个元素
        NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];

        //2.---------------------获取所有的key
        NSArray *allKeys = [dict allKeys];

        //3.---------------------获取所有的value
        //可能为二维数组
        NSArray *allValues = [dict allValues];

        //4.---------------------通过key获取value
        NSArray *values = [dict objectForKey:@"zhang"];

        //5.---------------------优化的语法
        NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};
        NSLog(@"%@",dict3);

        NSArray *array4 = dict3[@"zhang"];

    }
    return 0;
}

1、创建方法

//1.---------------------字典的创建
NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil];
NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil];

//第一个元素:key:@"zhang" value:array1
//第二个元素:key:@"li"  value:array2
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil];
NSLog(@"%@",dict);

我们可以看到,NSDirctionary类的创建是基于NSArray的,然后其他的和Java中的Map就差不多了,一般是key-value的形式,当然这里也是需要注意结尾是:nil

运行结果:

打印结果是key-value的样式

2、添加元素

//存放一个元素
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];

3、获取所有元素的key

//2.---------------------获取所有的key
NSArray *allKeys = [dict allKeys];

4、获取所有元素的value

//3.---------------------获取所有的value
//可能为二维数组
NSArray *allValues = [dict allValues];

5、通过key获取value

//4.---------------------通过key获取value
NSArray *values = [dict objectForKey:@"zhang"];

6、NSDirctionary的快速创建方式和访问方式

//5.---------------------优化的语法
NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};
NSLog(@"%@",dict3);

NSArray *array4 = dict3[@"zhang"];

二、NSMutableDirctionary类

//
//  main.m
//  20_NSMutableDictionary
//
//  Created by jiangwei on 14-10-12.
//  Copyright (c) 2014年 jiangwei. All rights reserved.
//

#import <Foundation/Foundation.h>

//可变字典
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1.-------------创建一个可变字典,大小为3
        NSMutableDictionary *md1 = [[NSMutableDictionary alloc] initWithCapacity:3];
        NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lis", nil];

        //2.-------------添加元素
        [md1 setObject:array1 forKey:@"zhang"];

        NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];
        [md2 addEntriesFromDictionary:md1];

        //3.-------------删除元素
        [md1 removeObjectForKey:@"zhang"];//以key删除
        [md1 removeAllObjects];//删除所有元素
        [md1 removeObjectsForKeys:array1];//以value删除

        //4.-------------循环遍历字典
        //快速遍历
        for (NSString *key in md1) {
            NSArray *values = [md1 objectForKey:key];
            for(NSString *v in values){
                NSLog(@"%@",v);
            }
        }

        //普通遍历
        NSArray *allKey = [md1 allKeys];
        for(int i=0;i<allKey.count;i++){
            NSArray *value = [md1 objectForKey:allKey[i]];
        }

        //字典是无序的

    }
    return 0;
}

之前的NSDirctionary类是不可变字典,同样的OC中也有对应的可变字典:NSMutableDirctionary

1、创建可变字典

//1.-------------创建一个可变字典,大小为3
NSMutableDictionary *md1 = [[NSMutableDictionary alloc] initWithCapacity:3];
NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lis", nil];

创建一个可变字典,可以指定其大小,当然当容量满的之后,他回自动扩容

2、添加元素

//2.-------------添加元素
[md1 setObject:array1 forKey:@"zhang"];

NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];
[md2 addEntriesFromDictionary:md1];

3、删除元素

//3.-------------删除元素
[md1 removeObjectForKey:@"zhang"];//以key删除
[md1 removeAllObjects];//删除所有元素
[md1 removeObjectsForKeys:array1];//以value删除

4、遍历字典

//4.-------------循环遍历字典
//快速遍历
for (NSString *key in md1) {
    NSArray *values = [md1 objectForKey:key];
    for(NSString *v in values){
        NSLog(@"%@",v);
    }
}

//普通遍历
NSArray *allKey = [md1 allKeys];
for(int i=0;i<allKey.count;i++){
    NSArray *value = [md1 objectForKey:allKey[i]];
}

总结

这一篇文章就介绍了OC中的NSDirctionary类和NSMutableDirctionary类,他们的用途在后面非常关键,经常被用到。

时间: 2024-10-02 00:55:14

OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类的相关文章

(转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的. 一.NSDirctionary类 1 // 2 // main.m 3 // 19_NSDictionary 4 // 5 //

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗.. 注:那为什么基本类型不能存入到集合中呢? 原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有

(转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java中集合的思想,应该还有一个Set,是的,OC中有NSSet和NSMutableSet这两个类的,但是,这里我为什么不单独介绍了呢?因为他的操作和NSArray是非常相似的,只是他和NSArray有一个区别就是他不能放重复数据,而且他也是无序的.其他没什么了,所以就不单独介绍了,而且NSSet在后面的

OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类: http://blog.csdn.net/jiangwei0910410003/article/details/41788223 今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的.

OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

在之前的一篇文章中我们说到了Foundation框架中的NSObject对象: http://blog.csdn.net/jiangwei0910410003/article/details/41788121 那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutableString是可变的,和Java中的StringBuilder一样. 一.NSStr

(转载)OC学习篇之---Foundation框架中的NSObject对象

前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现有的类和功能提供给我们使用.那么今天首先来介绍一下Foundation框架中的第一个类NSObject. 在之前介绍了类的相关知识,我们看到我们自定义的类都必须实现NSObject类,这个类内部有很多现有的方法可以供我们使用

(转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutableString是可变的,和Java中的StringBuilder一样. 一.NSString对象 在OC中,NSString对象是非常重要的一个对象,也是最基础的一个对象,是用来处理字符串的常用类,和Java中的St

OC学习篇之---Foundation框架中的NSObject对象

前一篇文章讲到了OC中的代理模式:http://blog.csdn.net/jiangwei0910410003/article/details/41777627,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现有的类和功能提供给我们使用.那么今天首先来介绍一下Foundation框架中的第一个类NSOb

(转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的. 下面就先来看一下NSArray类: 一.NSArray类 1 // 2 // main.m 3 // 16_NSArray 4 /