如果NSDictionary适用于配对值,那么对于三重值有什么好处?

时间:2009-06-19 11:58:52

标签: iphone objective-c nsarray nsdictionary

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

具体:数据结构,我们称之为Person,我设想有三个值: (NSString)name,(int)age,(BOOL)isAlive

这些将保存在数组(?)中。能够同时使用名称作为键,并且从零开始用数字引用整个块是很重要的。

6 个答案:

答案 0 :(得分:9)

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

如果你有两个键和一个值,你可能会使用一个嵌套字典 - 也就是一个字典,其中键是第一个键,值是另一个字典。嵌套字典的键是第二个键,值将是您的实际值。

ETA:

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

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

[myDict objectForKey:@"joe"];

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

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

如果通过索引获取人员的唯一目的是循环遍历整个集合,那么最好使用keyEnumerator方法枚举循环中的键并使用这些键来查找值。 / p>

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

起初看起来似乎没有关系,但请查看此Introduction to Cocoa Bindings中面向字典的结构。 (CocoaDevCentral和Scott Stevenson是新Cocoa开发人员的绝佳资源。)他使用的方法非常灵活,易于改变。使用字典而不是ivars并不总是最好的解决方案,但它可能非常适合您的需求。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

您需要查看CoreData(如果您正在存储它)并为您的对象定义一个类。像NSDictionary这样的本机通用对象不是用于存储组成复杂对象的复杂值,如Person。

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

答案 5 :(得分:-1)

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