Перебор и изменение срезов
Читайте и записывайте данные через срез.
«Перебор и изменение срезов» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Массивы фиксированного размера
- Срезы: указатель плюс длина
- Создание срезов с помощью array[start..end]
- Перебор и изменение срезов