陣列建構函式
可以使用陣列建構函式使用語法建立 rank-1 陣列值
(/ ... /)
[ ... ]
形式 [...]
是在 Fortran 2003 中引入的,通常被認為更清晰,特別是在複雜的表示式中。此表單僅用於此示例。
陣列建構函式中的值可以是標量值,陣列值或隱含 do 迴圈。
構造的陣列的型別和型別引數與陣列建構函式中的值匹配
[1, 2, 3] ! A rank-1 length-3 array of default integer type
[1., 2., 3.] ! A rank-1 length-3 array of default real type
["A", "B"] ! A rank-1 length-2 array of default character type
integer, parameter::A = [2, 4]
[1, A, 3] ! A rank-1 length-4 array of default integer type, with A's elements
integer i
[1, (i, i=2, 5), 6] ! A rank-1 length-6 array of default integer type with an implied-do
在上面的表格中,給出的所有值必須是相同的型別和型別引數。不允許混合型別或型別引數。以下示例無效
[1, 2.] ! INVALID: Mixing integer and default real
[1e0, 2d0] ! INVALID: Mixing default real and double precision
[1., 2._dp] ! INVALID: Allowed only if kind `dp` corresponds to default real
["Hello", "Frederick"] ! INVALID: Different length parameters
要使用不同型別構造陣列,應給出陣列的型別規範
[integer :: 1, 2., 3d0] ! A default integer array
[real(dp) :: 1, 2, 3._sp] ! A real(dp) array
[character(len=9) :: "Hello", "Frederick"] ! A length-2 array of length-9 characters
後一種形式的字元陣列特別方便避免空間填充,例如替代
["Hello ", "Frederick"] ! A length-2 array of length-9 characters
名為 constant 的陣列的大小可以由用於設定其值的陣列建構函式隱含
integer, parameter::ids(*) = [1, 2, 3, 4]
對於長度引數化型別,可以假設長度引數
character(len=*), parameter::names(*) = [character(3) :: "Me", "You", "Her"]
在零長度陣列的構造中也需要型別規範。從
[ ] ! Not a valid array constructor
無法從不存在的值集確定型別和型別引數。要建立零長度預設整數陣列:
[integer :: ]
陣列建構函式僅構造 rank-1 陣列。有時,例如在設定命名常量的值時,表示式中也需要更高階別的陣列。可以從具有構造的秩 -1 陣列的 reshape
的結果中獲取更高秩的陣列
integer, parameter::multi_rank_ids(2,2) = RESHAPE([1,2,3,4], shape=[2,2])
在陣列建構函式中,陣列的值按元素順序與值列表中的任何陣列一樣,就好像各個元素以陣列元素順序自己給出。因此,前面的例子
integer, parameter::A = [2, 4]
[1, A, 3] ! A rank-1 length-4 array of default integer type, with A's elements
相當於
[1, 2, 4, 3] ! With the array written out in array element order
通常,建構函式中的值可以是任意表示式,包括巢狀陣列建構函式。對於這樣的陣列建構函式來滿足某些條件,例如作為常量或規範表示式,限制適用於組成值。
雖然不是陣列建構函式,但也可以使用 spread
內部函式方便地建立某些陣列值。例如
[(0, i=1,10)] ! An array with 10 default integers each of value 0
也是函式引用的結果
SPREAD(0, 1, 10)