example 10
This commit is contained in:
parent
3f11e9e2df
commit
cb1a40665d
|
@ -0,0 +1,15 @@
|
|||
.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
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"authors": [
|
||||
"alexander"
|
||||
],
|
||||
"description": "Массивы, ассоциативные массивы и строки",
|
||||
"license": "proprietary",
|
||||
"name": "example_10",
|
||||
"targetPath": "bin"
|
||||
}
|
|
@ -0,0 +1,156 @@
|
|||
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