macOS开发备忘录

NSDictionary细说(二)—— 字典的创建

2017-08-27  本文已影响293人  刀客传奇

版本记录

版本号 时间
V1.0 2017.08.27

前言

NSDictionary是不可变字典,它的不可变性可以参考NSArray数组,但是它与数组还是有很大不同,尽管他们都属于集合类,下面这几篇我们继续来将一下基础类的知识。还是老规矩从整体到局部,从浅入深进行讲解,谢谢大家。感兴趣的可以参考我上面几篇。
1. NSDictionary细说(一)—— 整体了解

一、+ (instancetype)dictionary;

该方法的作用就是:创建并返回一个空的字典。该方法主要用于NSDictionary的可变子类。如果不想要临时对象,还可以使用alloc ...和init创建一个空字典。

下面看示例代码。

- (void)demoDictionary
{
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    NSLog(@"dict = %@", dict);
}

看输出结果

2017-08-27 16:50:33.670 JJOC[6245:199913] dict = {
}

结论:空字典实例化。


二、+ (NSDictionary<KeyType,ObjectType> *)dictionaryWithContentsOfFile:(NSString *)path;

该方法的作用就是:使用由给定路径指定的文件中找到的键和值创建并返回字典。

下面看一下参数和返回值:

还要注意:

下面看示例代码

- (void)demoDictionaryWithContentsOfFile
{
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/lucy/Desktop/demo/JJOC/JJOC/Property List.plist"];
    NSLog(@"dict = %@", dict);
}

下面看输出结果

2017-08-27 20:36:02.897 JJOC[7260:234979] dict = {
    One = 1;
    Three = 3;
    Two = 2;
}

下面看我建立的plist文件。

结论:根据文件生成字典。


三、+ (NSDictionary<KeyType,ObjectType> *)dictionaryWithContentsOfURL:(NSURL *)url;

该方法的作用就是:使用由给定URL指定的资源中找到的键和值创建并返回字典。

下面看参数:

还要注意:

结论:根据指定的URL生成字典。


四、+ (instancetype)dictionaryWithDictionary:(NSDictionary<KeyType,ObjectType> *)dict;

该方法的作用就是:创建并返回一个包含来自另一个给定字典的键和值的字典。

看示例代码

- (void)demoDictionaryWithDictionary
{
    NSDictionary *givenDict = @{@"One" : @"1", @"Two" : @"2"};
    NSDictionary *dict = [NSDictionary dictionaryWithDictionary:givenDict];
    NSLog(@"dict = %@", dict);
}

看输出结果

2017-08-27 20:44:18.039 JJOC[7584:243640] dict = {
    One = 1;
    Two = 2;
}

结论:根据给定字典实例化新的字典。


五、+ (instancetype)dictionaryWithObject:(ObjectType)object forKey:(id<NSCopying>)key;

该方法的作用是:创建并返回包含给定键和值的字典。

看一下参数:

下面看示例代码

- (void)demoDictionaryWithObject
{
    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"1" forKey:@"One"];
    NSLog(@"dict = %@", dict);
}

看输出结果

2017-08-27 20:50:40.159 JJOC[7838:250574] dict = {
    One = 1;
}

结论:实例化具有单个键值对的字典。


六、+ (instancetype)dictionaryWithObjects:(NSArray<ObjectType> *)objects forKeys:(NSArray<id<NSCopying>> *)keys;

该方法的作用就是:创建并返回一个字典,其中包含从数组的内容生成的键和值。

下面看输出结果:

还要注意:

下面看示例代码

- (void)demoDictionaryWithObjects
{
    NSArray *keys = @[@"One", @"Two"];
    NSArray *values = @[@1 , @2];
    NSDictionary *dict = [NSDictionary dictionaryWithObjects:values forKeys:keys];
    NSLog(@"dict = %@", dict);
}

看输出结果

2017-08-27 20:58:55.582 JJOC[8099:258476] dict = {
    One = 1;
    Two = 2;
}

结论:根据键值数组和值数组创建多键值对的字典。


七、+ (instancetype)dictionaryWithObjects:(const ObjectType _Nonnull [])objects forKeys:(const id<NSCopying> _Nonnull [])keys count:(NSUInteger)cnt;

该方法的作用是:返回具有固定键值对数组的字典。

下面看一下参数和返回值:

还要注意:

static const NSInteger N_ENTRIES = 26;
NSDictionary *asciiDict;
NSString *keyArray[N_ENTRIES];
NSNumber *valueArray[N_ENTRIES];
NSInteger i;
 
for (i = 0; i < N_ENTRIES; i++) {
 
    char charValue = 'a' + i;
    keyArray[i] = [NSString stringWithFormat:@"%c", charValue];
    valueArray[i] = [NSNumber numberWithChar:charValue];
}
 
asciiDict = [NSDictionary dictionaryWithObjects:(id *)valueArray
                          forKeys:(id *)keyArray count:N_ENTRIES];

看一下这个示例的输出结果

2017-08-27 21:08:34.600 JJOC[8380:266866] asciiDict = {
    a = 97;
    b = 98;
    c = 99;
    d = 100;
    e = 101;
    f = 102;
    g = 103;
    h = 104;
    i = 105;
    j = 106;
    k = 107;
    l = 108;
    m = 109;
    n = 110;
    o = 111;
    p = 112;
    q = 113;
    r = 114;
    s = 115;
    t = 116;
    u = 117;
    v = 118;
    w = 119;
    x = 120;
    y = 121;
    z = 122;
}

结论:根据C数组包含的键值创建指定数目键值对的字典。


八、+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;

该方法的作用是:创建并返回一个字典,其中包含从指定的值和键集合构造的条目。

下面看一下参数:

下面还要注意:

看一下下面示例代码

- (void)demoDictionaryWithObjectsAndKeysOC
{
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"value1", @"key1", @"value2", @"key2", nil];
    NSLog(@"dict = %@", dict);
}

看输出结果

2017-08-27 21:13:48.833 JJOC[8664:273512] dict = {
    key1 = value1;
    key2 = value2;
}

结论:根据有序的值键排序创建字典。

后记

未完,待续~~~

上一篇 下一篇

猜你喜欢

热点阅读