Урок 3. Список, Словарь и текст

Список

Список из T — растущий массив. Тип нужно указывать явно слева, вывести его из значения нельзя:

функция главная(): целое
    Список из целых числа = Список из целых();
    числа.добавить(10);
    числа.добавить(20);
    числа.добавить(30);

    вывести("Размер: %(числа.размер())%");
    вывести("Первое: %(числа.получить(0))%");

    числа.удалить(1);
    для каждого число в числа
        вывести("элемент: %число%");
    конец
    числа.освободить();
    вернуть 0;
конец
Размер: 3
Первое: 10
элемент: 10
элемент: 30

удалить(индекс) убирает элемент и сдвигает хвост влево. Список не освобождается сам — когда он больше не нужен, вызовите .освободить().

Словарь

Словарь из К и З хранит пары «ключ — значение». Метод получить возвращает не значение, а результат из …: ключа может не быть, и это нужно проверить:

функция главная(): целое
    Словарь из текста и целого возрасты = Словарь из текста и целого();
    возрасты.положить("Аня", 25);
    возрасты.положить("Борис", 31);
    возрасты.положить("Аня", 26);

    вывести("Записей: %(возрасты.размер())%");

    результат из целого аня = возрасты.получить("Аня");
    если (аня.успешно)
        вывести("Аня: %(аня.значение)%");
    конец

    результат из целого вера = возрасты.получить("Вера");
    если ( не вера.успешно)
        вывести("Веры в словаре нет");
    конец
    возрасты.освободить();
    вернуть 0;
конец
Записей: 2
Аня: 26
Веры в словаре нет

Повторный положить с тем же ключом заменяет значение (Аня стала 26, а записей по-прежнему две). Словарь тоже нужно освобождать вручную.

Чтобы перебрать все пары, используйте ключ_по_индексу(i) и значение_по_индексу(i) для i от 0 до размер() - 1; порядок — как при первой вставке:

пока (i меньше возрасты.размер())
    текст имя = возрасты.ключ_по_индексу(i);
    целое возраст = возрасты.значение_по_индексу(i);
    вывести("%имя%: %возраст%");
    i = i + 1;
конец

Возвращённый текст принадлежит словарю, его освобождать не нужно.

Текст

Строки — это байты в UTF-8, поэтому длина считает байты, а не буквы: в кириллице одна буква занимает два байта. Позиции из найти тоже в байтах.

функция главная(): целое
    текст фраза = "Привет, Сфера!";
    вывести("Длина в байтах: %(длина(фраза))%");
    вывести(регистр_в_верхний("abc") + " " + регистр_в_нижний("ABC"));

    если (содержит(фраза, "Сфера"))
        вывести("Нашли слово");
    конец

    результат из целого позиция = найти(фраза, ",");
    если (позиция.успешно)
        вывести("Запятая на позиции %(позиция.значение)%");
    конец

    результат из целого число = текст_в_целое("123");
    если (число.успешно)
        вывести("Число плюс один: %(число.значение + 1)%");
    конец
    вернуть 0;
конец
Длина в байтах: 25
ABC abc
Нашли слово
Запятая на позиции 12
Число плюс один: 124

В «Привет, Сфера!» 14 символов, но 25 байт — по два на каждую русскую букву и по одному на запятую, пробел и восклицательный знак.

Основные функции: длина, содержит, найти, подстрока, регистр_в_верхний, регистр_в_нижний, текст_в_целое. Сложение строк делается знаком +.

Упражнения

  1. Посчитайте среднее значение списка чисел.
  2. Сохраните в словаре число жителей пяти городов и выведите население выбранного.
  3. Проверьте, содержит ли строка слово «конец», и выведите позицию.

Дальше: Урок 4. Ошибки без исключений.