Compare commits
No commits in common. "example_10" and "master" have entirely different histories.
example_10
...
master
|
@ -1,15 +0,0 @@
|
||||||
.dub
|
|
||||||
docs.json
|
|
||||||
__dummy.html
|
|
||||||
docs/
|
|
||||||
/example_10
|
|
||||||
example_10.so
|
|
||||||
example_10.dylib
|
|
||||||
example_10.dll
|
|
||||||
example_10.a
|
|
||||||
example_10.lib
|
|
||||||
example_10-test-*
|
|
||||||
*.exe
|
|
||||||
*.o
|
|
||||||
*.obj
|
|
||||||
*.lst
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"authors": [
|
|
||||||
"alexander"
|
|
||||||
],
|
|
||||||
"description": "Массивы, ассоциативные массивы и строки",
|
|
||||||
"license": "proprietary",
|
|
||||||
"name": "example_10",
|
|
||||||
"targetPath": "bin"
|
|
||||||
}
|
|
|
@ -1,156 +0,0 @@
|
||||||
import std.stdio, std.random;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// Динамические массивы
|
|
||||||
|
|
||||||
{
|
|
||||||
int[] arr1 = new int[20];
|
|
||||||
auto arr2 = new int[20];
|
|
||||||
assert(arr1 == arr2);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto arr = new double[uniform(1, 128)];
|
|
||||||
foreach (i; 0 .. arr.length)
|
|
||||||
{
|
|
||||||
arr[i] = uniform(0.0, 1.0);
|
|
||||||
}
|
|
||||||
writeln(arr);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto arr = new double[uniform(1, 128)];
|
|
||||||
foreach (ref i; arr)
|
|
||||||
{
|
|
||||||
i = uniform(0.0, 1.0);
|
|
||||||
}
|
|
||||||
writeln(arr);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto arr = new int[100];
|
|
||||||
auto copy = arr.dup;
|
|
||||||
assert(arr !is copy);
|
|
||||||
assert(arr == copy);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto arr = new int[10];
|
|
||||||
arr[9] = 42;
|
|
||||||
assert(arr[$ - 1] == 42);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
||||||
writeln(arr[$ / 2 .. $]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto a = [1.0, 2.5, 3.6];
|
|
||||||
auto b = [4.5, 5.5, 1.4];
|
|
||||||
auto c = new double[3];
|
|
||||||
c[] = 4 * (a[] + b[]);
|
|
||||||
writeln(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Статические массивы
|
|
||||||
|
|
||||||
{
|
|
||||||
int[3] a;
|
|
||||||
assert(a == [0, 0, 0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
int[4] a = -1;
|
|
||||||
assert(a == [-1, -1, -1, -1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// Неинициализированный массив
|
|
||||||
int[1024] a = void;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Многомерные массивы
|
|
||||||
|
|
||||||
{
|
|
||||||
auto array = new int[][5];
|
|
||||||
foreach (i, ref e; array)
|
|
||||||
{
|
|
||||||
e = new int[array.length - i];
|
|
||||||
}
|
|
||||||
writeln(array);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
enum size_t rows = 64, columns = 128;
|
|
||||||
// Выделить память под матрицу с 64 строками и 128 столбцами
|
|
||||||
double[columns][rows] matrix;
|
|
||||||
// Вообще не нужно выделять память под массив – это значение
|
|
||||||
foreach (ref row; matrix)
|
|
||||||
{
|
|
||||||
// Использовать строку типа double[columns]
|
|
||||||
}
|
|
||||||
|
|
||||||
// В объявлении типа массива размеры измерений указаны «справа налево» (то есть double[столбцы][строки]),
|
|
||||||
// а при обращении к элементам массива индексы указываются «слева на право».
|
|
||||||
// Это объясняется тем, что [] и [n] в типах привязываются справа налево, а в выражениях – слева направо.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ассоциативные массивы
|
|
||||||
|
|
||||||
{
|
|
||||||
int[string] aa = ["здравствуй": 42, "мир": 75];
|
|
||||||
writeln(aa["здравствуй"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto aa = ["здравствуй": 42, "мир": 75];
|
|
||||||
writeln(aa["мир"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto coffeePrices = [
|
|
||||||
"французская ваниль": 262,
|
|
||||||
"ява": 239,
|
|
||||||
"французская обжарка": 224
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach (kind, price; coffeePrices)
|
|
||||||
{
|
|
||||||
writefln("%s стоит %s руб. за 100 г", kind, price);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
string a = "hello";
|
|
||||||
string b = a; // Переменная b теперь тоже указывает на значение "hello"
|
|
||||||
string c = b[0 .. 4]; // Переменная c указывает на строку "hell"
|
|
||||||
// Если бы такое присваивание было разрешено, это изменило бы a, b, и c:
|
|
||||||
// a[0] = 'H';
|
|
||||||
// Конкатенация оставляет переменные b и c нетронутыми:
|
|
||||||
a = 'H' ~ a[1 .. $];
|
|
||||||
assert(a == "Hello" && b == "hello" && c == "hell");
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
string a = "Независимо от представления \u03bb стоит \u20AC20.";
|
|
||||||
wstring b = "Независимо от представления \u03bb стоит \u20AC20.";
|
|
||||||
dstring c = "Независимо от представления \u03bb стоит \u20AC20.";
|
|
||||||
writeln(a, '\n', b, '\n', c);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
string str = "Hall\u00E5, V\u00E4rld!";
|
|
||||||
foreach (c; str)
|
|
||||||
{
|
|
||||||
write('[', c, ']');
|
|
||||||
}
|
|
||||||
writeln();
|
|
||||||
foreach (dchar c; str)
|
|
||||||
{
|
|
||||||
write('[', c, ']');
|
|
||||||
}
|
|
||||||
writeln();
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue