Zig Academy · Урок

Перебор и изменение срезов

Читайте и записывайте данные через срез.

Урок 4 из 413 шагов

«Перебор и изменение срезов» — бесплатный урок Zig Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.

Обход среза

Получив срез, обычно нужно посетить каждый его элемент. Цикл for в Zig аккуратно проходит срез от начала до конца. 🔁

for для элементов

Поместите срез в круглые скобки и назовите каждый элемент с помощью захвата в вертикальных чертах. На каждой итерации цикл передаёт Вам одно значение.

for (items) |value| {
    // use value
}

Только чтение по умолчанию

Обычный захват предоставляет копию каждого элемента. Изменение этой копии не затрагивает исходные данные среза.

Захват указателя для изменения

Добавьте * перед именем захвата, чтобы получить указатель вместо копии. Теперь запись через него изменяет настоящий элемент.

for (items) |*value| {
    value.* += 1;
}

Разыменование для записи

При захвате указателя используйте .*, чтобы обратиться к значению, на которое он указывает. Этот синтаксис позволяет и читать, и присваивать значение.

value.* = 0;

Срез должен быть изменяемым

Чтобы изменять элементы, тип среза должен быть обычным []T, а не []const T. Константный срез запрещает запись через него.

Цикл с индексом

Объедините срез с диапазоном, чтобы дополнительно получить счётчик. Второй захват после запятой — это текущий индекс.

for (items, 0..) |value, i| {
    // i is the index
}

Прямая индексация

Можно также записать значение в позицию по индексу без захвата в цикле. Выполняйте присваивание через квадратные скобки так же, как для массива.

items[0] = 42;

Совместный обход двух срезов

Передайте несколько срезов одному циклу for, чтобы обходить их синхронно. Они должны иметь одинаковую длину, иначе произойдёт аварийное завершение.

for (xs, ys) |x, y| {
    // x and y line up
}

Накопление результата

Храните текущую сумму в var, объявленной перед циклом, а затем обновляйте её на каждой итерации.

var total: i32 = 0;
for (items) |v| total += v;

Пропуск с помощью continue

Внутри цикла continue сразу переходит к следующему элементу. Используйте его, чтобы игнорировать значения, не прошедшие быструю проверку.

for (items) |v| {
    if (v < 0) continue;
}

Быстрая проверка

Вы хотите удвоить каждый элемент среза []i32 на месте. Какая форма захвата позволяет записать результат обратно?

Итоги

Обходите срез с помощью for: обычные захваты читают копии, |*value| вместе с .* изменяет элементы на месте, а диапазон позволяет отслеживать индекс. 🎯

Можно начать бесплатно

Изучай Zig с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Перебор и изменение срезов» бесплатный?

Да — полный текст урока «Перебор и изменение срезов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.

Чему я научусь в уроке «Перебор и изменение срезов»?

Читайте и записывайте данные через срез. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Zig Academy?

Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Перебор и изменение срезов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Zig Academy?

Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Массивы фиксированного размера
  2. Срезы: указатель плюс длина
  3. Создание срезов с помощью array[start..end]
  4. Перебор и изменение срезов
← Назад к Zig Academy