Rust Guide > Documentation > Iterators > Take

Introduction

The take function in Rust is a method provided by the Iterator trait that allows you to create an iterator that yields a specified number of elements from the original iterator. This function is useful when you need to limit the number of elements processed or when you want to sample the beginning of a sequence.

Syntax

The basic syntax of the take function is as follows:

iterator.take(n)

Here, iterator is any type that implements the Iterator trait, and n is the number of elements you want to take from the original iterator.

Example Usage

Example 1: Taking the First N Elements

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    let first_three: Vec<i32> = numbers.iter().take(3).cloned().collect();
    println!("{:?}", first_three); // Output: [1, 2, 3]
}

Example 2: Taking Elements from an Infinite Iterator

fn main() {
    let infinite_numbers = 1..;
    let first_five: Vec<i32> = infinite_numbers.take(5).collect();
    println!("{:?}", first_five); // Output: [1, 2, 3, 4, 5]
}

Example 3: Combining with Other Iterator Methods

fn main() {
    let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    let even_numbers: Vec<i32> = numbers.iter()
                                        .filter(|&&x| x % 2 == 0)
                                        .take(3)
                                        .cloned()
                                        .collect();
    println!("{:?}", even_numbers); // Output: [2, 4, 6]
}

Example 4: Taking Elements from a String Iterator

fn main() {
    let text = "Hello, Rustaceans!";
    let first_five_chars: String = text.chars().take(5).collect();
    println!("{}", first_five_chars); // Output: Hello
}

Example 5: Taking Elements from a HashMap

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("one", 1);
    map.insert("two", 2);
    map.insert("three", 3);
    map.insert("four", 4);

    let taken: HashMap<_, _> = map.into_iter().take(2).collect();
    println!("{:?}", taken); // Output: {"one": 1, "two": 2}
}

Considerations

  • The take method creates a new iterator that ends after the specified number of elements, but it does not modify the original iterator.
  • If the original iterator has fewer elements than specified, the resulting iterator will yield all available elements without any error.

See Also

  • filter - Creates an iterator that only yields elements that satisfy a predicate.
  • map - Transforms each element of an iterator and returns a new iterator with the transformed elements.
  • collect - Transforms an iterator into a collection such as a vector or hash map.
  • skip - Creates an iterator that skips the first n elements.
  • enumerate - Adds a counter to an iterator, returning an iterator of pairs where the first element is the counter and the second is the item.