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

Метод take_while

Метод take_while создаёт новый итератор, который извлекает элементы из исходного итератора до тех пор, пока предикат возвращает true. Как только предикат вернёт false, итератор завершается и больше не возвращает элементы, даже если последующие элементы удовлетворяют условию. Параметром метод принимает замыкание-предикат, которое получает ссылку на очередной элемент и возвращает bool.

Метод является ленивым: элементы извлекаются по мере необходимости при вызове next.

Синтаксис

iter.take_while(predicate)

Пример

Давайте возьмём элементы из вектора до тех пор, пока они меньше 4:

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

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

[1, 2, 3]

Пример

Обратите внимание, что после первого элемента, не удовлетворяющего условию, итератор полностью останавливается. Давайте убедимся в этом на примере:

fn main() { let vec = vec![1, 2, 3, 10, 4, 5]; let res: Vec<i32> = vec.iter() .take_while(|&&x| x < 5) .cloned() .collect(); println!("{:?}", res); }

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

[1, 2, 3]

Несмотря на то, что элементы 4 и 5 удовлетворяют условию, они не попали в результат, потому что итератор остановился на элементе 10.

Пример

Давайте применим take_while к итератору символов строки и выведем результат:

fn main() { let s = "abcde"; let res: String = s.chars() .take_while(|&c| c != 'c') .collect(); println!("{}", res); }

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

"ab"

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

  • метод take,
    который берёт первые n элементов итератора
  • метод skip_while,
    который пропускает элементы, пока предикат возвращает true
  • метод filter,
    который оставляет только элементы, удовлетворяющие предикату
  • метод map_while,
    который преобразует элементы, пока предикат возвращает true
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить