Skip to content

Latest commit

ย 

History

History
executable file
ยท
302 lines (262 loc) ยท 7.31 KB

README.md

File metadata and controls

executable file
ยท
302 lines (262 loc) ยท 7.31 KB

Iterator Methods

Basic

cloned

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .cloned()
    .collect::<Vec<_>>() // [๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]

collect

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .collect::<Vec<_>>() // [&๐Ÿฎ, &๐Ÿฅ”, &๐Ÿ”, &๐ŸŒฝ]

count

[๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ].iter().count() // 3 (usize)

last

[๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ].iter().last() // &๐Ÿฆ 

nth

[๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ].iter().nth(1) // &๐Ÿถ

Behavior

cycle

list = [๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .cycle()
    .take(6)
    .collect::<Vec<_>>() // [&๐Ÿฎ, &๐Ÿฅ”, &๐Ÿ”, &๐ŸŒฝ, &๐Ÿฎ, &๐Ÿฅ”]

rev

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .rev()
    .collect::<Vec<_>>() // [&๐ŸŒฝ, &๐Ÿ”, &๐Ÿฅ”, &๐Ÿฎ]

skip

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .skip(2)
    .collect::<Vec<_>>() // [&๐Ÿ”, &๐ŸŒฝ]

step_by

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .step_by(2)
    .collect::<Vec<_>>() // [&๐Ÿฎ, &๐Ÿ”]

take

list = [๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .take(3)
    .collect::<Vec<_>>() // [&๐Ÿฎ, &๐Ÿฅ”, &๐Ÿ”]

Combine

chain

let animals = [๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ];
let food = [๐Ÿฐ, ๐Ÿ”, ๐Ÿฌ];
animals.iter()
    .chain(food.iter())
    .collect::<Vec<_>>() // [&๐Ÿฑ, &๐Ÿถ, &๐Ÿฆ, &๐Ÿฐ, &๐Ÿ”, &๐Ÿฌ]

flatten

vec![vec![๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ], vec![๐Ÿฐ, ๐Ÿ”, ๐Ÿฌ]]
    .iter()
    .flatten()
    .collect::<Vec<_>>() // [&๐Ÿฑ, &๐Ÿถ, &๐Ÿฆ, &๐Ÿฐ, &๐Ÿ”, &๐Ÿฌ]

unzip

let (animals, foods): (Vec<Animal>, Vec<Food>) = 
[(๐Ÿฑ, ๐Ÿฐ), (๐Ÿถ, ๐Ÿ”), (๐Ÿฆ, ๐Ÿฌ)]
    .iter()
    .unzip(food.iter());

println!("{:?}", left); // [๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ]
println!("{:?}", right); // [๐Ÿฐ, ๐Ÿ”, ๐Ÿฌ]

zip

let animals = [๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ];
let food = [๐Ÿฐ, ๐Ÿ”, ๐Ÿฌ];
animals.iter()
    .zip(food.iter())
    .collect::<Vec<_>>() // [(&๐Ÿฑ, &๐Ÿฐ), (&๐Ÿถ, &๐Ÿ”), (&๐Ÿฆ, &๐Ÿฌ)]

Recursive

emumerate

[๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ]
    .iter()
    .enumerate()
    .collect::<Vec<_>>() // [(0, &๐Ÿฑ), (1, &๐Ÿถ), (2, &๐Ÿฆ)]
for (index, animal) in [๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ].iter().enumerate() 
{
    println!("{}, {}", index, animal) // "0, ๐Ÿฑ ", "1, ๐Ÿถ ", "2, ๐Ÿฆ "
}

flat_map

let salad = vec![๐Ÿฅ—]
let entree = vec![๐Ÿ”, ๐ŸŸ];
let dessert = vec![๐Ÿจ, ๐Ÿฐ];
let dinner = vec![salad, entree, dessert];

let vegetarian_choices: Vec<Food> = dinner
    .iter()
    .flat_map(|course| {
        course.iter().filter(|&food| is_vegetarian(food))
    })
    .collect(); // [๐Ÿฅ—, ๐ŸŸ, ๐Ÿฐ, ๐Ÿจ] \TODO aren't these references?

fold

[๐Ÿ”, ๐ŸŸ, ๐Ÿจ] // calories: 500, 200, 600
    .iter()
    .fold(0, |total_calories, &food| {
        total_calories + food
    }) // 1300

for_each

[๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ]
    .iter()
    .for_each(|&animal| {
        speak(animal) // "meow", "bark", "chirp"
    });

map

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .map(|&ingredient| cook(ingredient))
    .collect::<Vec<_>>() // [๐Ÿ”, ๐ŸŸ, ๐Ÿ—, ๐Ÿฟ]

scan

[๐Ÿ”, ๐ŸŸ, ๐Ÿจ] // calories: 500, 200, 600
    .iter()
    .scan(0, |total_calories, &food| {
        *total_calories = *total_calories + food;

        Some(total_calories)
    })
    .collect::<Vec<_>>() // [500, 700, 1300]

Search & Filter

filter

[๐Ÿ”, ๐ŸŸ, ๐Ÿ—, ๐Ÿฟ]
    .iter()
    .filter(|&food| is_vegetarian(food))
    .collect::<Vec<_>>() // [&๐ŸŸ, &๐Ÿฟ]

filter_map

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .filter_map(|&ingredient| {
        if is_vegetable(ingredient) {
            Some(cook(ingredient))
        } else {
            None
        }
    })
    .collect::<Vec<_>>() // [๐ŸŸ, ๐Ÿฟ]

skip_while

[๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ, ๐Ÿฐ, ๐Ÿ”, ๐Ÿฌ, ๐Ÿ”]
    .iter()
    .skip_while(|&x| is_animal(x))
    .collect::<Vec<_>>() // [&๐Ÿฐ, &๐Ÿ”, &๐Ÿฌ, &๐Ÿ”]

take_while

[๐Ÿฑ, ๐Ÿถ, ๐Ÿฆ, ๐Ÿฐ, ๐Ÿ”, ๐Ÿฌ, ๐Ÿ”]
    .iter()
    .take_while(|&x| is_animal(x))
    .collect::<Vec<_>>() // [&๐Ÿฑ, &๐Ÿถ, &๐Ÿฆ]

partition

let (vegetarian, omnivore): <(Vec<Food>, Vec<Food>)> = [๐Ÿ”, ๐ŸŸ, ๐Ÿ—, ๐Ÿฟ]
    .iter()
    .partition(|food| is_vegetarian(food));
    
println!("{:?}", vegetarian); // [&๐ŸŸ, &๐Ÿฟ]
println!("{:?}", omnivore); // [&๐Ÿ”, &๐Ÿ—]

all

[๐Ÿ”, ๐ŸŸ, ๐Ÿ—, ๐Ÿฟ]
    .iter()
    .all(|&food| is_vegetarian(food)) // false
[๐Ÿฅ—, ๐Ÿ‡, ๐Ÿ…, ๐ŸŽ]
    .iter()
    .all(|&food| is_vegetarian(food)) // true

any

[๐Ÿ”, ๐ŸŸ, ๐Ÿ—, ๐Ÿฟ]
    .iter()
    .any(|&food| is_vegetarian(food)) // true
[๐Ÿ”, ๐Ÿ—, ๐Ÿฃ, ๐Ÿฅ“]
    .iter()
    .any(|&food| is_vegetarian(food)) // false

find

[๐Ÿ”, ๐ŸŸ, ๐Ÿ—, ๐Ÿฟ]
    .iter()
    .find(|&food| is_vegetarian(food)) // Some(&๐ŸŸ)
[๐Ÿ”, ๐Ÿ—, ๐Ÿฃ, ๐Ÿฅ“]
    .iter()
    .find(|&food| is_vegetarian(food)) // None

find_map

[๐Ÿฎ, ๐Ÿฅ”, ๐Ÿ”, ๐ŸŒฝ]
    .iter()
    .find_map(|ingredient| {
        if is_vegetable(ingredient) {
            Some(ingredient)
        } else {
            None
        }
    }) // &๐Ÿฅ” 

position

[๐Ÿ”, ๐ŸŸ, ๐Ÿ—, ๐Ÿฟ]
    .iter()
    .position(|&food| is_vegetarian(food)) // Some(1)
[๐Ÿ”, ๐Ÿ—, ๐Ÿฃ, ๐Ÿฅ“]
    .iter()
    .position(|&food| is_vegetarian(food)) // None