Drain, what is it for

What is a drain method on iterator used for?
Thanks

It is used to remove a range of elements from a vector, optionally giving you the elements in the range.

1 Like

Why clear couldn't be used?

Clear removes all values in the vector, but drain lets you remove only a sub-range.

let mut vec = vec![1, 2, 3, 4, 5];
vec.drain(1..=3);
println!("{:?}", vec);
[1, 5]

Additionally, the drain function returns an Iterator, which means you can see the elements as they get removed, which clear also does not let you do.

let mut vec = vec![1, 2, 3, 4, 5];
for num in vec.drain(1..=3) {
    println!("{} was removed.", num);
}
println!("{:?}", vec);
2 was removed.
3 was removed.
4 was removed.
[1, 5]
6 Likes

I don't see it mentioned much, but splice is another handy method in the same family.

You can consider drain to be a special case of splice where the input (replace_with) iterator is empty.

2 Likes

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.