D Language
Dynamiska matriser och skivor
Sök…
Syntax
- <typ> [] <namn>;
Anmärkningar
Skivor genererar en ny vy på befintligt minne. De skapar inte en ny kopia. Om ingen skiva har en referens till det minnet längre - eller en skivad del av det - kommer det att frigöras av avfallssamlaren.
Med hjälp av skivor är det möjligt att skriva mycket effektiv kod för t.ex. parsers som bara fungerar på ett minnesblock och bara skär de delar de verkligen behöver för att arbeta med - inget behov av att tilldela nya minnesblock.
Förklaring och initialisering
import std.stdio;
void main() {
int[] arr = [1, 2, 3, 4];
writeln(arr.length); // 4
writeln(arr[2]); // 3
// type inference still works
auto arr2 = [1, 2, 3, 4];
writeln(typeof(arr2).stringof); // int[]
}
Array-operationer
import std.stdio;
void main() {
int[] arr = [1, 2, 3];
// concatenate
arr ~= 4;
writeln(arr); // [1, 2, 3, 4]
// per element operations
arr[] += 10
writeln(arr); // [11, 12, 13, 14]
}
skivor
import std.stdio;
void main() {
int[] arr = [1, 2, 3, 4, 5];
auto arr2 = arr[1..$ - 1]; // .. is the slice syntax, $ represents the length of the array
writeln(arr2); // [2, 3, 4]
arr2[0] = 42;
writeln(arr[1]); // 42
}
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow