diff options
| author | bors <bors@rust-lang.org> | 2020-01-30 20:58:57 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-01-30 20:58:57 +0000 |
| commit | 34700c15c7a49d400951da385b2eacab6fb6fe86 (patch) | |
| tree | a9b6c00759063072d80ff36975e14b4d1a8012b9 /src/test/codegen/src-hash-algorithm/src-hash-algorithm-md5.rs | |
| parent | 212b2c7da87f3086af535b33a9ca6b5242f2d5a7 (diff) | |
| parent | db1a107b3f920637dc785fcc6d6bbe247a271e7b (diff) | |
| download | rust-34700c15c7a49d400951da385b2eacab6fb6fe86.tar.gz rust-34700c15c7a49d400951da385b2eacab6fb6fe86.zip | |
Auto merge of #66577 - WaffleLapkin:iter_take_while_map, r=mark-simulcrum
Add `Iterator::map_while`
In `Iterator` trait there is `*_map` version of [`filter`] — [`filter_map`], however, there is no `*_map` version of [`take_while`], that can also be useful.
### Use cases
In my code, I've found that I need to iterate through iterator of `Option`s, stopping on the first `None`. So I've written code like this:
```rust
let arr = [Some(4), Some(10), None, Some(3)];
let mut iter = arr.iter()
.take_while(|x| x.is_some())
.map(|x| x.unwrap());
assert_eq!(iter.next(), Some(4));
assert_eq!(iter.next(), Some(10));
assert_eq!(iter.next(), None);
assert_eq!(iter.next(), None);
```
Thit code
1) isn't clean
2) In theory, can generate bad bytecode (I'm actually **not** sure, but I think that `unwrap` would generate additional branches with `panic!`)
The same code, but with `map_while` (in the original PR message it was named "take_while_map"):
```rust
let arr = [Some(4), Some(10), None, Some(3)];
let mut iter = arr.iter().map_while(std::convert::identity);
```
Also, `map_while` can be useful when converting something (as in [examples]).
[`filter`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.filter
[`filter_map`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.filter_map
[`take_while`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.take_while
[examples]: https://github.com/rust-lang/rust/compare/master...WaffleLapkin:iter_take_while_map?expand=1#diff-7e57917f962fe6ffdfba51e4955ad6acR1042
Diffstat (limited to 'src/test/codegen/src-hash-algorithm/src-hash-algorithm-md5.rs')
0 files changed, 0 insertions, 0 deletions
