1

我只是在考虑什么是最好的方式,即存储具有多行和多列的数据的数据结构。我应该将其存储为: 1. 数组数组?2. NSDictionary?

或者在 iOS 中是否有任何类似网格的数据结构,我可以轻松地从数据结构中轻松获取任何行/列?例如,我必须能够获取第 5 行第 3 列中的值。目前,比如说,我将每一行存储为一个数组,并将这些数组存储在另一个数组中(比如数组数组),然后获取第 5 行第 3 列的值,我需要获取数组数组中的第 5 行,然后在结果数组中,我需要获取第 3 个对象。有一个更好的方法吗?请问有什么想法吗?

4

3 回答 3

3

然后要获取第 5 行第 3 列中的值,我需要获取数组数组中的第 5 行,然后在结果数组中,我需要获取第 3 个对象。有一个更好的方法吗?

数组数组很适合实现,最近添加到 Objective-C 的集合下标使这更容易——你可以使用如下表达式

NSString *s = myData[m][n];

获取第 th 行n第 th 列的字符串m

也就是说,为您的数据结构创建一个单独的类可能仍然是一个好主意,这样您的其余代码就不需要知道数据是如何存储的。这也将简化将实现从数组数组更改为 SQLite 表或其他东西的过程。

您的数据存储类不需要花哨或复杂。这是第一关:

@interface DataTable

- (id)objectAtRow:(NSInteger)row column:(NSInteger)column;
- (void)setObjectAtRow:(NSInteger)row column:(NSInteger)column;

@end

我相信您可以看到如何根据数组数组来实现这些。当调用者尝试设置当前范围之外的值时,您必须做一些工作来添加行和/或列。您可能还想添加对诸如快速枚举以及写入和读取属性列表之类的支持,但这可能会在以后出现。

于 2013-04-22T05:11:42.690 回答
2

还有其他方法可以做到这一点,但是您使用的方法没有错。例如,您可以将 NSDictionary 与 NSIndexPath 类型的键一起使用,甚至可以使用“row,col”形式的字符串键,但除了稀疏矩阵之外,我没有看到任何优势。

于 2013-04-22T04:27:06.870 回答
1

您可以使用数组数组,就像您正在做的那样,也可以使用字典数组。两者都可以,而且我认为其中一个没有任何偏好。这一切都取决于首先哪种方式最方便您设置数据结构。使用任一方法访问表视图的数据同样容易。

于 2013-04-22T04:26:32.053 回答