Name Description Size
chain.rs 6901
chunks.rs 5383
cloned.rs 4951
collect
copied.rs 4937
empty.rs 2165
enumerate.rs 3507
extend.rs 14626
filter.rs 3513
filter_map.rs 3708
find.rs 2727
find_first_last
flat_map.rs 3952
flat_map_iter.rs 3753
flatten.rs 3342
flatten_iter.rs 3129
fold.rs 7169
fold_chunks.rs 6420
fold_chunks_with.rs 6378
for_each.rs 1416
from_par_iter.rs 6053
inspect.rs 6103
interleave.rs 9010
interleave_shortest.rs 2298
intersperse.rs 10270
len.rs 6252
map.rs 5972
map_with.rs 14235
mod.rs Traits for writing parallel programs using an iterator-style interface You will rarely need to interact with this module directly unless you have need to name one of the iterator types. Parallel iterators make it easy to write iterator-like chains that execute in parallel: typically all you have to do is convert the first `.iter()` (or `iter_mut()`, `into_iter()`, etc) method into `par_iter()` (or `par_iter_mut()`, `into_par_iter()`, etc). For example, to compute the sum of the squares of a sequence of integers, one might write: ```rust use rayon::prelude::*; fn sum_of_squares(input: &[i32]) -> i32 { input.par_iter() .map(|i| i * i) .sum() } ``` Or, to increment all the integers in a slice, you could write: ```rust use rayon::prelude::*; fn increment_all(input: &mut [i32]) { input.par_iter_mut() .for_each(|p| *p += 1); } ``` To use parallel iterators, first import the traits by adding something like `use rayon::prelude::*` to your module. You can then call `par_iter`, `par_iter_mut`, or `into_par_iter` to get a parallel iterator. Like a [regular iterator][], parallel iterators work by first constructing a computation and then executing it. In addition to `par_iter()` and friends, some types offer other ways to create (or consume) parallel iterators: - Slices (`&[T]`, `&mut [T]`) offer methods like `par_split` and `par_windows`, as well as various parallel sorting operations. See [the `ParallelSlice` trait] for the full list. - Strings (`&str`) offer methods like `par_split` and `par_lines`. See [the `ParallelString` trait] for the full list. - Various collections offer [`par_extend`], which grows a collection given a parallel iterator. (If you don't have a collection to extend, you can use [`collect()`] to create a new one from scratch.) [the `ParallelSlice` trait]: ../slice/trait.ParallelSlice.html [the `ParallelString` trait]: ../str/trait.ParallelString.html [`par_extend`]: trait.ParallelExtend.html [`collect()`]: trait.ParallelIterator.html#method.collect To see the full range of methods available on parallel iterators, check out the [`ParallelIterator`] and [`IndexedParallelIterator`] traits. If you'd like to build a custom parallel iterator, or to write your own combinator, then check out the [split] function and the [plumbing] module. [regular iterator]: https://doc.rust-lang.org/std/iter/trait.Iterator.html [`ParallelIterator`]: trait.ParallelIterator.html [`IndexedParallelIterator`]: trait.IndexedParallelIterator.html [split]: fn.split.html [plumbing]: plumbing/index.html Note: Several of the `ParallelIterator` methods rely on a `Try` trait which has been deliberately obscured from the public API. This trait is intended to mirror the unstable `std::ops::Try` with implementations for `Option` and `Result`, where `Some`/`Ok` values will let those iterators continue, but `None`/`Err` values will exit early. A note about object safety: It is currently _not_ possible to wrap a `ParallelIterator` (or any trait that depends on it) using a `Box<dyn ParallelIterator>` or other kind of dynamic allocation, because `ParallelIterator` is **not object-safe**. (This keeps the implementation simpler and allows extra optimizations.) 111427
multizip.rs 8955
noop.rs 1074
once.rs 1659
panic_fuse.rs 7703
par_bridge.rs 5648
plumbing
positions.rs 3472
product.rs 2245
reduce.rs 2315
repeat.rs 5547
rev.rs 2806
skip.rs 2455
splitter.rs 5519
step_by.rs 3445
sum.rs 2026
take.rs 2024
test.rs 58725
try_fold.rs 7536
try_reduce.rs 3244
try_reduce_with.rs 3410
unzip.rs 13584
update.rs 7668
while_some.rs 3758
zip.rs 3934
zip_eq.rs 1752