0

表示这种数据结构的最佳方式是什么?我正在使用 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 数据结构适合此类数据?

4

3 回答 3

1

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

于 2011-02-27T21:40:34.620 回答
1

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

index1D = numColumns * row2DIndex + column2DIndex;

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

于 2011-02-27T22:34:37.410 回答
1

您可以使用数组数组,即NSArray包含包含数据的其他NSArray对象的对象。这种方法的缺点是由您的程序来强制限制数组的大小,以便每一行和每一列都有一致的大小。如果您的数据是静态的并且可以 plist(仅包含字符串、数字、日期、数据、数组或字典),请考虑将其存储在 plist 文件中,然后使用[NSArray arrayWithContentsOfFile:].

如果您希望使用诸如 之类的键来访问数据Location1,那么您需要使用NSDictionary对象而不是NSArray对象;但是,这样做您将失去按顺序或通过数字索引访问数据的能力(必须始终通过键访问)。

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

于 2011-02-27T21:21:01.580 回答