訪問數(shù)組時,只需在添加在 index specification 范圍內(nèi)的下標,如 3.2 中的數(shù)組Unit1:
Unit1 (1) := 190; -- 賦予Unit(1)值 190;
Unit1 (7) := 210;
Unit1 (7) > Unit (1) -- 返回 True;
數(shù)組的值雖然可以單個元素分別賦予,但這樣做明顯是開玩笑的麻煩。以上例中的Var:Enrollment 為例,一般情況下可以如下賦值:
Var := (15,14,13);
結(jié)果為 Var (Bill) = 15, Var (Jack) = 14, Var (Tom) =13,( )中的值,按順序賦給數(shù)組里的元素,因此數(shù)量也不能少:
Var := (15,14) -- 不合法
當數(shù)組元素有名稱時,例如元素下標是用枚舉類型表示,也可以這樣賦值:
Var := (Bill => 15, Jack => 14, Tom => 13);
結(jié)果與上等同。但如果同時用以上兩種表示法是不合法的,如:
Var := (Bill => 15, Jack => 14, 13); -- 不合法
如希望相鄰的一些元素都是相同值,如 Var (Bill)、 Var(Jack)、Var(Tom)都等于 15,則可以如下:
Var := (Bill .. Tom => 15);
注意是 Bill 和 Tom (包括它們本身)之間的所有元素值為 15。
而希望 Var (Bill) 等于 15,其余都等于14時,也可以如下:
Var := (Bill => 15, others => 14);
這樣 Var (Jack) = Var(Tom) =14。others 在有很多元素都要賦予相同值時是相當有用。
如果將 Var 作為常量數(shù)組,則在聲明該數(shù)組時就賦予初使值:
Var :constant Enrollment := (Bill => 15, others => 14);
最后看一下以下三種情況:
type Vector is array (Integer range <>) of Float;
V: Vector(1 .. 5) := (3 .. 5 => 1.0, 6 | 7 => 2.0);-- [1]
V := (3 .. 5 => 1.0, others => 2.0); -- [2]
V := (1.0, 1.0, 1.0, others => 2.0); -- [3]
對于 [3],我們已經(jīng)學(xué)過:V(1)=V(2)=V(3)=1.0,V(4)=V(5)=2.0。 但 [1] 和 [2] 卻很特殊,在 [1] 中:V(1)=V(2)=V(3)=1.0,V(4)=V(5)=2.0;在[2]中V(3)=V(4)=V(5)=1.0,V(1)=V(2)=2.0。[1]和[2] 的情況是 Ada95 新增的。像 [1] 的話,Ada83 會認為它是超過了數(shù)組的下標,產(chǎn)生異常 Constraint_Error,而在 Ada95 則是合法的,并且( )里面的值按順序賦給數(shù)組的元素;[2] 在 Ada83 里也是不允許的,Ada95 允許先賦值給V(3),V(4),V(5),others 就默認是指 V(1) 和 V(2)。這3種情況很容易引起混淆,請讀者注意一下。
賦值
整個數(shù)組的值可以賦給另一個數(shù)組,但這兩個數(shù)組需要是同1種數(shù)組類型,如果是無約束數(shù)組,數(shù)組的元素的個數(shù)要相等。如:
My_Name : String (1..10) := "Dale ";
Your_Name : String (1..10) := "Russell ";
Her_Name : String (21..30) := "Liz ";
His_Name : String (1..5) := "Tim ";
Your_Name := My_Name;
Your_Name := Her_Name; -- 合法的,它們的元素個數(shù)和類型相同
His_name := Your_name; -- 會產(chǎn)生錯誤,類型雖然相同,但長度不同
等式與不等式
數(shù)組也可以使用運算符 = ,/=,<=,>=,<,> ,但意義與單個元素使用這些運算符不一樣。如:
Your_Name = His_Name --返回值為 False
=,/= 比較兩個數(shù)組中每個元素的值。如果兩個數(shù)組相對應(yīng)的元素值---包括數(shù)組長度都相等,則這兩個數(shù)組相等,否則不相等。
Your_Name < His_Name --返回值為 True
<=,>=,>,< 實際上比較數(shù)組中第一個值的大小,再返回True或Fasle,數(shù)組長度不一樣也可比較。
連接符
連接符為 & ,表示將兩個數(shù)組類型相“串聯(lián)”。如:
His_Name & Your_Name --返回字符串 "Tim Russell"
type vector is array(positive range <>) of integer;
a : vector (1..10);
b : vector (1..5) := (1,2,3,4,5);
c : vector (1..5) := (6,7,8,9,10);
a := b & c;
則 a =( 1,2,3,4,5,6,7,8,9,10);如果再添一句:
a := a (6..10) & a(1..5);
則 a =(6,7,8,9,10,1,2,3,4,5)。這種情況也有點特殊,雖然 a(1..5) 看上去接在 a(10) 后面,實際上 a(6..10)和a(1..5)連接重新組合成一個10個元素的數(shù)組,再賦該值給 a。這種用法在 Ada83 里是認為不合法的,因為它認為 a(1..5) 是接在 a(10) 之后,而 a 只有10 個元素,不是 15 個。
數(shù)組屬性有以下一些,A 表示該數(shù)組:
A'First 返回 A 的下標范圍的下限。
A'Last 返回 A 的下標范圍的上限。
A'Range 返回 A 的下標范圍,等價于 A'First .. A'Last。
A'Length 返回 A 中元素的數(shù)目。
下面的是為多維數(shù)組準備的:
A'First(N) 返回 A 中第 N 個下標范圍的下限。
A'Last(N) 返回 A 中第 N 個下標范圍的上限。
A'Range(N) 返回 A 中第 N 個下標范圍,等價于 A'First(N) .. A'Last(N)。
A'Length(N) 返回 A 中第 N 個下標范圍所包含元素的數(shù)目。
如:
Rectange : Matrix (1..20,1..30);
Length : array (1..10) of Integer;
因此:
Rectange'First (1) = 1; Rectange'Last (1) = 20;
Rectange'First (2) = 1; Rectange'Last (1) = 30;
Rectange'Length (1) = 20; Rectange'Length (2) = 30;
Rectange'Range(1) =1.. 20; Rectange'Range (2) = 1..30;
Length'First = 1; Length'Last = 10;
Length'Range = 1..10; Length'Length = 10;
更多建議: