定义多维数组的多个元素

时间:2013-07-09 13:07:48

标签: ada

在Ada中,当您声明一个数组时,您可以执行类似

的操作
    Work_Day : constant array (Day) of Boolean := (Mon .. Fri => True, Sat | Sun => False);

利用..和|符号来说明数组的多个元素,而不必引用每个数组。

我想做类似的事情,但是有一个数组数组,我不想在声明中这样做,而是在程序的后面,当我可能需要重新定义初始值时。我正在尝试做类似

的事情
   -- Set elements 2 through 5 of row 1 to asdf
   Array_of_Arrays(1)(2..5) := "asdf";

   -- Set elements 1 and 3 of row 1 to asdf2
   Array_of_Arrays(1)(1 | 3) := "asdf2"

但似乎两者都不是正确的语法。有没有办法做到这一点?

由于

1 个答案:

答案 0 :(得分:5)

语法

Array_of_Arrays(1)(2..5) := "asdf";

是合法的,假设您拥有的是真正数组数组。但是,我猜你没有。与某些语言(C,Java等)不同,Ada对多维数组和“数组数组”进行了区分。二维数组声明为

type Array_Type is array (1 .. 10, 1 .. 5) of Character;
Array_2D : Array_Type; 

(类似于3维或更高维数组)。当您声明这样的数组类型时,使用以逗号分隔的索引来引用单个元素:

Array_2D (2, 3) := 'x';

而不是

Array_2D (2) (3) := 'x';  -- wrong!!  will not compile

您不能将切片用于多维数组:

Array_2D (1, 2..5) := "asdf";

语言设计师不允许这样做。

数组数组将声明为:

type Array_Row is array (1 .. 5) of Character;
type Array_Of_Array_Type is array (1 .. 10) of Array_Row;
Array_Of_Arrays : Array_Of_Array_Type;

现在,由于数组行类型是分开的,因此不使用多维数组语法。要获得一个角色,你可以使用类似

的东西
Array_Of_Arrays (2) (3) := 'x';

做一些像

这样的事情是合法的
Array_Of_Arrays (1) (2..5) := "asdf";

但不是

Array_Of_Arrays (1, 2..5) := "asdf";  -- syntax error

关键是要记住,在这种情况下,数组的每个“行”都是一个单独的数组对象,它有自己的数组类型;而在多维情况下,行没有自己的类型。

你可以使用任何一个;在某些情况下,数组数组可能更合适,有些情况下多维数组更合适。

由于String是一种数组类型,因此它也是一个数组数组:

type Array_Of_Strings is array (1 .. 10) of String(1..5);

这是合法的:

A : Array_Of_Strings;

A (3) (4) := 'y';

但不是

A (3, 4) := 'y';         -- illegal