【问题标题】:How to add to an NSDictionary如何添加到 NSDictionary
【发布时间】:2011-03-10 17:53:32
【问题描述】:

我使用NSMutableArray 并意识到使用字典对于我想要实现的目标要简单得多。

我想在字典中将键保存为NSString,将值保存为int。这是怎么做到的?其次,可变字典和普通字典有什么区别?

【问题讨论】:

    标签: iphone objective-c nsdictionary


    【解决方案1】:

    作为参考,您还可以使用 initWithDictionary 来初始化 NSMutableDictionary 与一个字面值:

    NSMutableDictionary buttons = [[NSMutableDictionary alloc] initWithDictionary: @{
        @"touch": @0,
        @"app": @0,
        @"back": @0,
        @"volup": @0,
        @"voldown": @0
    }];
    

    【讨论】:

      【解决方案2】:

      更新版本

      Objective-C

      创建:

      NSDictionary *dictionary = @{@"myKey1": @7, @"myKey2": @5}; 
      

      变化:

      NSMutableDictionary *mutableDictionary = [dictionary mutableCopy];     //Make the dictionary mutable to change/add
      mutableDictionary[@"myKey3"] = @3;
      

      简写语法称为Objective-C Literals

      斯威夫特

      创建:

      var dictionary = ["myKey1": 7, "myKey2": 5]
      

      变化:

      dictionary["myKey3"] = 3
      

      【讨论】:

        【解决方案3】:

        当数组被声明时,我们只需要在 NSDictionary 中添加键值对

        NSDictionary *normalDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Value1",@"Key1",@"Value2",@"Key2",@"Value3",@"Key3",nil];
        

        我们不能在这个 NSDictionary 中添加或删除键值

        在 NSMutableDictionary 中,我们也可以在数组初始化后添加对象 通过使用这种方法

        NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc]init];'
        [mutableDict setObject:@"Value1" forKey:@"Key1"];
        [mutableDict setObject:@"Value2" forKey:@"Key2"];
        [mutableDict setObject:@"Value3" forKey:@"Key3"];
        

        要删除键值,我们必须使用以下代码

        [mutableDict removeObject:@"Value1" forKey:@"Key1"];
        

        【讨论】:

          【解决方案4】:

          通过设置您将使用NSMutableDictionary 对象的setValue:(id)value forKey:(id)key 方法:

          NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
          [dict setValue:[NSNumber numberWithInt:5] forKey:@"age"];
          

          或者在现代 Objective-C 中:

          NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
          dict[@"age"] = @5;
          

          可变和“正常”之间的区别是可变性。 IE。你可以改变NSMutableDictionary(和NSMutableArray)的内容,而你不能用“正常”NSDictionaryNSArray来做到这一点

          【讨论】:

          • 您不应该将该整数包装在 NSNumber 中吗?
          • 我还有一个问题。我需要将用户输入的文本存储为字符串以及用户将文本保存到的图像引用(图像数组中的索引)。我尝试了一个 mutableArray 对象,它有 2 个变量,我刚才提到的每个变量都有一个。尝试使用数组对象文本值填充 tableView 时效果不佳。所以我想到了一个字典,唯一的问题是它看起来不像我可以通过索引检索数据,它必须是像 hashmap 这样的键或值吗?
          • @Johan - 正确且更新! @alJaree - 是的,字典是一种键值存储。我认为在您的位置上,您最好使用一系列字典。类似[{image: "/path/to/img/1.jpg", data: "foo bar 1"}, {image: "/path/to/img/2.jpg", data: "foo bar 2"}, ..., {image: "/path/to/img/N.jpg", data: "foo bar N"}]
          • 这对我仍然不起作用,因为我需要从每个对象中检索文本并使用它来填充收藏夹 UITableView 以及我需要对图像数组的索引引用,以便我可以检索和显示选择的收藏图像。我尝试了上面描述的对象,但是由于某种原因从 NSStrings 的数组中读取时返回的对象而不是存储的特定对象。我不知道在这里做什么,
          • 我在想我可能只需要存储 NSStrings,例如 @"%d_%@、index、savedTitle,然后只需拆分 NSString 并获取并支付我需要的东西。我在想java术语,确定obj c中一定有split函数。:)
          【解决方案5】:

          可变 字典可以更改,即您可以添加和删除对象。 不可变的一旦创建就固定了。

          创建和添加:

          NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:10];
          [dict setObject:[NSNumber numberWithInt:42] forKey:@"A cool number"];
          

          并检索:

          int myNumber = [[dict objectForKey:@"A cool number"] intValue];
          

          【讨论】:

          • 你必须用容量初始化,还是只能是动态的?
          • 您不必指定初始容量,但如果这样做,您可能会看到性能提升。如果您预先知道它将包含多少项目,请提供此数字或稍大的值。
          • 要求 NSDictionary 而不是 NSMutableDictionary ?
          【解决方案6】:

          您要问的是“可变数组或字典与不可变数组或字典有什么区别”。很多时候,不同的术语被用来描述你已经知道的事情。在这种情况下,您可以将术语“可变”替换为“动态”。因此,可变字典或数组是“动态”的并且可以在运行时更改,而非可变字典或数组是“静态”并在您的代码中定义并且在运行时不会更改(换句话说,您将不会添加、删除或排序元素。)

          至于它是如何完成的,您要求我们在此处重复文档。您需要做的就是在示例代码和 Xcode 文档中搜索,以了解它是如何完成的。但是在我第一次学习时,可变的东西也让我感到震惊,所以我给你一个!

          【讨论】:

          • 有时在 Xcode 文档上没有足够体面的解释,它在没有明确示例的情况下进入深入的理论,并非总是如此,但有时。 :P 是的,我现在了解可变(能够变异)部分,谢谢。 :)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-29
          • 1970-01-01
          相关资源
          最近更新 更多