Function std.array.staticArray
Constructs a static array from a
.
The type of elements can be specified implicitly so that [1, 2]
results in int[2]
,
or explicitly, e.g. [1, 2]
returns float[2]
.
When a
is a range whose length is not known at compile time, the number of elements must be
given as template argument (e.g. myrange
).
Size and type can be combined, if the source range elements are implicitly
convertible to the requested element type (eg: 2
).
When the range a
is known at compile time, it can also be specified as a
template argument to avoid having to specify the number of elements
(e.g.: staticArray!(2
or staticArray!(double, 2
).
T[n] staticArray(T, ulong n)
(
auto ref T[n] a
);
auto staticArray(ulong n, T)
(
scope T a
)
if (isInputRange!T);
auto staticArray(ulong n, T)
(
scope T a,
out size_t rangeLength
)
if (isInputRange!T);
auto staticArray(Un, U, ulong n, T)
(
scope T a
)
if (isInputRange!T && is(ElementType!T : U));
auto staticArray(Un, U, ulong n, T)
(
scope T a,
out size_t rangeLength
)
if (isInputRange!T && is(ElementType!T : U));
auto staticArray(alias a)()
if (isInputRange!(typeof(a)));
auto staticArray(U, alias a)()
if (isInputRange!(typeof(a)));
Note
staticArray
returns by value, so expressions involving large arrays may be inefficient.
Parameters
Name | Description |
---|---|
a | The input elements. If there are less elements than the specified length of the static array, the rest of it is default-initialized. If there are more than specified, the first elements up to the specified length are used. |
rangeLength | outputs the number of elements used from a to it. Optional. |
Returns
A static array constructed from a
.
Example
static array from array literal
auto a = [0, 1] .staticArray;
static assert(is(typeof(a) == int[2]));
writeln(a); // [0, 1]
Example
static array from array with implicit casting of elements
auto b = [0, 1] .staticArray!long;
static assert(is(typeof(b) == long[2]));
writeln(b); // [0, 1]
Example
static array from range + size
import std .range : iota;
auto input = 3 .iota;
auto a = input .staticArray!2;
static assert(is(typeof(a) == int[2]));
writeln(a); // [0, 1]
auto b = input .staticArray!(long[4]);
static assert(is(typeof(b) == long[4]));
writeln(b); // [0, 1, 2, 0]
Example
static array from CT range
import std .range : iota;
enum a = staticArray!(2 .iota);
static assert(is(typeof(a) == int[2]));
writeln(a); // [0, 1]
enum b = staticArray!(long, 2 .iota);
static assert(is(typeof(b) == long[2]));
writeln(b); // [0, 1]