Метод take
Метод take создаёт новый итератор, который извлекает не более n элементов из исходного итератора. Параметром метод принимает количество элементов n, которое нужно взять из исходного итератора. Если исходный итератор содержит меньше n элементов, то новый итератор вернёт все имеющиеся элементы. Метод не изменяет исходный итератор, а лишь создаёт адаптер, который ограничивает его длину.
Синтаксис
iter.take(n)
Пример
Давайте возьмём первые три элемента из вектора чисел:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res: Vec<i32> = vec.iter().take(3).cloned().collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3]
Пример
Если запросить больше элементов, чем есть в итераторе, метод вернёт все доступные элементы:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res: Vec<i32> = vec.iter().take(10).cloned().collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте возьмём первые два элемента из вектора строк:
fn main()
{
let vec = vec!["a", "b", "c", "d", "e"];
let res: Vec<&str> = vec.iter().take(2).cloned().collect();
println!("{:?}", res);
}
Результат выполнения кода:
["a", "b"]
Пример
Метод take можно комбинировать с другими адаптерами, например с map:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res: Vec<i32> = vec.iter().take(3).map(|x| x * 10).collect();
println!("{:?}", res);
}
Результат выполнения кода:
[10, 20, 30]
Смотрите также
-
метод
skip,
который пропускает первые n элементов итератора -
метод
take_while,
который берёт элементы, пока выполняется условие -
метод
map,
который преобразует каждый элемент итератора -
метод
collect,
который собирает элементы итератора в коллекцию