【问题标题】:If NSDictionary is good for paired values, what is good for triple values?如果 NSDictionary 对成对值有好处,那么对三元值有什么好处呢?
【发布时间】:2009-06-19 11:58:51
【问题描述】:

NSDictionary 适用于键值对,当您拥有三个值时,哪种数据结构最适合?最好为这 3 个值创建一个类,然后让数组中的每个对象都包含该类的实例?

具体来说:数据结构,姑且称之为Person,我设想有3个值: (NSString)name, (int)age, (BOOL)isAlive

这些将保存在数组(?)中。重要的是既可以使用名称作为键,也可以使用从零开始的数字来引用整个块。

【问题讨论】:

  • 这个新结构是有 2 个键和 1 个值还是 1 个键和 2 个值?还是可以互换的?
  • 我认为你需要更彻底地解释这个问题。
  • 是的,NSDictionary 存储键值对,但这并不是重点。这些对不是对称的,你不能仅仅概括为“三元组”而不考虑 NSDictionary 的整个 point 是键是唯一的,而值不需要是唯一的。那么在你的“三元组”中,三个元素中哪些是类值的,哪些是类键的?

标签: iphone objective-c nsarray nsdictionary


【解决方案1】:

如果您有一个键和两个值,您可能会为这两个值创建一个类并仍然使用字典。

如果您有两个键和一个值,您可能会使用嵌套字典 - 即键是第一个键而值是另一个字典的字典。嵌套字典的键是第二个键,值是您的实际值。

预计到达时间:

现在您已经澄清了您的问题 - 如果您需要通过键或整数索引访问您的集合,您仍然可以使用字典。

要按键获取项目,您可以这样做:

[myDict objectForKey:@"joe"];

要按索引获取项目,您可以使用 allKeys 数组:

[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]];

如果按索引获取人员的唯一目的是遍历整个集合,则最好考虑使用 keyEnumerator 方法来枚举循环中的键并使用这些键来查找值。

【讨论】:

    【解决方案2】:

    您可以使用关系数据库模型使用核心数据来表示更复杂的数据关系。

    查看苹果的开发者网站以获取示例和文档。

    【讨论】:

      【解决方案3】:

      乍一看似乎无关,但请查看此Introduction to Cocoa Bindings 中的面向字典的结构。 (CocoaDevCentral 和 Scott Stevenson 是 Cocoa 新开发人员的重要资源。)他使用的方法非常灵活,并且很容易在以后更改。使用字典而不是 ivars 并不总是最好的解决方案,但它可能非常适合您的需求。

      注意:和Core Data一样,Cocoa Bindings也是一个非常复杂的话题。我建议只使用本教程的组织方面,而不是全力以赴地使用绑定。 :-)

      【讨论】:

        【解决方案4】:

        这取决于您是否尝试创建某种通用数据结构。如果“三个”事物是您应用程序中的特定概念,那么您可能正朝着domain model 前进 - 在这种情况下,您可能明智地将这些值封装在一个类中。

        如果您需要类似字典的功能 - [NSDictionary objectForKey:] 等 - 那么您仍然可以使用一个或多个字典作为将键值映射到类实例的索引。

        【讨论】:

          【解决方案5】:

          您需要查看 CoreData(如果您正在存储它)并为您的对象定义一个类。像 NSDictionary 这样的原生通用对象并不意味着存储构成像 Person 这样的复杂对象的复杂值。

          Person *person = [[Person alloc] init];
          person.firstName = @"blah";
          person.age = 24;
          person.isAlive = YES;
          

          【讨论】:

            【解决方案6】:

            这不是two dimensional数组的描述吗?

            【讨论】:

            • 您正在考虑一个数组,其中每个元素都链接到一个包含 3 个元素的数组。但是,二维数组与存储键值对无关——这需要字典,您可能还会看到它被称为“映射”、“关联数组”、“哈希”等。具体来说,NSDictionary支持 1 个键对 1 个值的对 - 他正在寻找 1 个键对 3 个值。
            猜你喜欢
            • 2022-06-30
            • 2012-10-09
            • 1970-01-01
            • 2011-02-19
            • 1970-01-01
            • 2016-05-07
            • 2013-11-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多