6

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

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

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

4

6 回答 6

9

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

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

预计到达时间:

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

要按键获取项目,您可以执行以下操作:

[myDict objectForKey:@"joe"];

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

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

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

于 2009-06-19T12:07:32.690 回答
1

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

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

于 2009-06-19T12:21:15.050 回答
1

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

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

于 2009-06-19T23:09:27.010 回答
0

这取决于您是否尝试制作某种通用数据结构。如果“三个”事物是您的应用程序中的特定概念,那么您可能正在走向域模型- 在这种情况下,您可能明智地将这些值封装在一个类中。

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

于 2009-06-19T12:08:37.353 回答
0

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

Person *person = [[Person alloc] init];
person.firstName = @"blah";
person.age = 24;
person.isAlive = YES;
于 2009-06-19T13:23:27.077 回答
-1

这不是二维数组的描述吗?

于 2009-06-19T12:03:05.897 回答