如何在Objective-C中表示表格数据

时间:2011-02-27 21:17:21

标签: ios objective-c iphone data-structures tabular

表示此数据结构的最佳方式是什么?我正在使用Objective-C进行iPhone开发,但通常都很好。

             Location1          Location2         Location3
Location1        0                  8                 23
Location2        8                  0                 16
Location3        23                 16                0

我可以做嵌套数组...

table = ['Location1' => ['Location 1' => '0',
                         'Location 2' => '8',
                         'Location 3' => '23'],
         'Location2' => ['Location 1' => '8',
                         'Location 2' => '0',
                         'Location 3' => '16'],
         'Location3' => ['Location 1' => '23',
                         'Location 2' => '16',
                         'Location 3' => '0']]

...但我不确定这是最有效的方式,因为有很多数据复制。也许是某种面向对象的方法?

此外,是否有任何特殊的iPhone Objective-C数据结构可以用于此类数据?

3 个答案:

答案 0 :(得分:1)

您可以使用数组数组,即NSArray个包含其他包含数据的NSArray个对象的对象。这种方法的缺点是程序可以对数组的大小实施限制,以便每个行和列具有一致的大小。如果您的数据是静态且可以删除的(仅包含字符串,数字,日期,数据,数组或字典),请考虑将其存储在plist文件中,并使用[NSArray arrayWithContentsOfFile:]一次性加载。

如果您希望使用Location1等密钥访问数据,则需要使用NSDictionary个对象而不是NSArray个对象;但是,这样做会导致您无法按顺序或通过数字索引访问数据(必须始终通过密钥访问)。

此外,如果您的数据是可变的(也就是说,您希望能够更改数据),则需要使用NSMutableArrayNSMutableDictionary

答案 1 :(得分:1)

我建议创建一个NSobject类的位置,其成员为location1,location2和location3。然后你可以使用location对象来获取如下值:
[locationobj location1];
稍后你也可以制作这些对象的nsarray或mutablearray

答案 2 :(得分:1)

你可以创建一个Mutable2DArray类,它在内部使用NSMutableArray,使用2D索引和1D索引或标记之间的转换:

index1D = numColumns * row2DIndex + column2DIndex;

你甚至可以在内部使用普通的C数组,具体取决于表格数据类型和其他要求(重用,可扩展性,效率,内存使用等)。