РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
292 of 1245 menu

Метод chunks_exact

Метод chunks_exact возвращает итератор, который разбивает срез на части (чанки) фиксированной длины. В отличие от метода chunks, последний неполный чанк отбрасывается, а не возвращается как остаток. Параметром метод принимает число chunk_size - размер каждого чанка. Если размер равен нулю, программа паникует.

Метод возвращает итератор, элементами которого являются срезы длиной chunk_size. Если длина исходного среза не кратна размеру чанка, оставшиеся элементы в итерацию не попадают.

Синтаксис

slice.chunks_exact(chunk_size)

Пример

Давайте разобьём вектор vec![1, 2, 3, 4, 5, 6, 7, 8] на чанки по 3 элемента:

fn main() { let vec = vec![1, 2, 3, 4, 5, 6, 7, 8]; let res: Vec<&[i32]> = vec.chunks_exact(3).collect(); println!("{:?}", res); }

Результат выполнения кода:

[[1, 2, 3], [4, 5, 6]]

Обратите внимание: элементы 7 и 8 не попали в результат, так как для них не хватило полного чанка.

Пример

Давайте разобьём вектор vec![1, 2, 3, 4, 5, 6] на чанки по 2 элемента - длина кратна размеру, поэтому все элементы попадут в результат:

fn main() { let vec = vec![1, 2, 3, 4, 5, 6]; let res: Vec<&[i32]> = vec.chunks_exact(2).collect(); println!("{:?}", res); }

Результат выполнения кода:

[[1, 2], [3, 4], [5, 6]]

Пример

Давайте получим остаток, который не вошёл ни в один полный чанк, с помощью метода remainder:

fn main() { let vec = vec![1, 2, 3, 4, 5, 6, 7, 8]; let mut iter = vec.chunks_exact(3); let res: Vec<&[i32]> = iter.by_ref().collect(); println!("{:?}", res); println!("{:?}", iter.remainder()); }

Результат выполнения кода:

[[1, 2, 3], [4, 5, 6]] [7, 8]

Пример

Давайте разобьём срез строки "abcde" на чанки по 2 символа:

fn main() { let slice = &"abcde"[..]; let res: Vec<&str> = slice.as_bytes().chunks_exact(2) .map(|chunk| std::str::from_utf8(chunk).unwrap()) .collect(); println!("{:?}", res); }

Результат выполнения кода:

["ab", "cd"]

Смотрите также

  • метод chunks,
    который разбивает срез на чанки, включая неполный остаток
  • метод windows,
    который возвращает итератор по перекрывающимся окнам
  • метод split_at,
    который делит срез на две части по индексу
  • метод len,
    который возвращает длину среза
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить