在Ada中,我希望创建10个类型为array(0..9)Integer的二维数组,创建10 x 10个单元格数组,我将通过索引进行操作。我希望能够分别处理10个层中的每个层,理想情况是通过混合变量名称,如“layer_(i)”(row,col):= xxx,而不是必须通过其静态名称(如“layer_1”)访问每个layer_x或者“layer_2”,所以我可以对每一层运行相同的程序算法,只需改变我的索引以适应每一层。
我有:
type grid is array (0..9) of Integer, (0..9) of integer;
layer_1, layer_2, layer_3, layer_4, layer_5,
layer_6, layer_7, layer_8, layer_9, layer_0: grid;
有没有我可以动态创建一个grid类型的变量,以便我可以通过“layer _”(x)而不是完整的静态名称“layer_1”来解决它?
====== 在发布这个之后,我意识到了一个可能的解决方案,虽然它没有直接解决问题中的细节,而是另一种解决方案。
我可以创建一个三维数组,或者二维数组的数组,我可以将其作为块(l,r,c)表示为层,r表示行,c表示列,而不是具有完整变量像Layer_1,layer_2等名称。在任何一种情况下,我将有1,000个单元格。当考虑数组中的结构时,也许没有办法解决这个问题,尽管数组似乎是第一个测试选择而不是单元格列表,这将涉及对人类概念化难以进行的先前和后续单元格的一些参考,但很好对于机器。
===== 而且,进一步思考我看到我不想要一个三维数组,但是一个包含10个10 x 10阵列的10个实例的单维数组将会起作用。我可以使用3个嵌套循环进行寻址,并且在操作每个10 x 10阵列中的100个单元时使用相同的代码,具体取决于10x10阵列的主要数组,并且可以使用循环变量立即访问每10个10网格中的每个单元L,R,C
答案 0 :(得分:2)
你的问题并不是那么清楚,但首先你要讨论的是二维细胞阵列:
type Coordinates is [some discrete subtype];
type Cell is [some type];
type Grid is array (Coordinates, Coordinates) of Cell;
这些层次:
type Layer_Indices is [some discrete subtype];
type Layers is array (Layer_Indices range <>) of Grid;
答案 1 :(得分:0)
您还可以将矢量用于图层索引。向量是可索引的并且是动态的。
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Containers.Vectors; use Ada.Containers;
procedure Hello is
type Grid is array (1..10,1..10) of Integer;
package Grid_Vectors is new Vectors(Positive,Grid);
subtype Vector is Grid_Vectors.Vector;
Layers : Vector;
procedure Print(The_Grid : Grid) is
begin
for x in The_Grid'Range(1) loop
for y in The_Grid'Range(2) loop
Put(Integer'Image(The_Grid(x,y)) & " "); -- print each one'
end loop;
New_Line;
end loop;
end Print;
begin
Put_Line("Hello, world!");
-- add a lot of layers
for Index in 1..20 loop
declare
New_Grid : Grid := (others => (others => Index));
begin
Layers.Append(New_Grid);
end;
end loop;
-- make some sort of adjustment to a specific layer
Layers(3)(1,3) := 23;
-- Print the grid
Print(Layers(3));
end Hello;