Метка цикла в Rust
Сейчас мы изучим метку цикла. Циклы можно вкладывать друг в друга. Внутренний выход по умолчанию останавливает только ближайшее тело. Метка перед кругом называет, из какого вложенного круга выходить.
Запись начинается с одинарной кавычки и двоеточия, например
'outer: перед loop. Чтобы выйти сразу из внешнего
круга, у break указывают имя метки:
'outer: loop {
loop {
break 'outer;
}
println!("inner done");
}
println!("outer done"); // выведет outer done
Строка "inner done" не выполнится. Метки удобны, когда внутри
несколько уровней:
'top: for i in 0..3 {
for j in 0..3 {
if i == 1 && j == 1 {
break 'top;
}
}
}
println!("after"); // выведет after
Пусть нужно получить строку "111222333444555666777888999".
Одним циклом здесь не обойтись. Внешний круг перебирает числа от
1 до 9, а внутренний повторяет текущее число три раза.
Счетчики принято называть i, j и, если понадобится
третий круг, k.
let mut text = String::from("");
for i in 1..=9 {
for _j in 1..=3 {
text.push_str(&i.to_string());
}
}
println!("{}", text); // выведет 111222333444555666777888999
Дано число:
let hit = 2;
Пометьте внешний круг именем 'main:, внутри перебирайте
0..5 и при шаге hit завершите внешнее тело. Выведите
"stop" после кругов.
Дан следующий код:
'a: loop {
break;
}
println!("x");
Скажите, выполнится ли вывод "x".
Сделайте два вложенных круга без условия. Внутренний сразу прерывает
внешний по метке 'out:. После скобок выведите "ok".
С помощью двух вложенных циклов соберите и выведите
строку "111222333444555666777888999".
С помощью двух вложенных циклов соберите и выведите
строку "11 12 13 21 22 23 31 32 33".