зеркало из https://github.com/mozilla/gecko-dev.git
f5b5dab005 | ||
---|---|---|
.. | ||
benches | ||
examples | ||
src | ||
tests | ||
.cargo-checksum.json | ||
.travis.yml | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
Makefile | ||
README.rst | ||
custom.css |
README.rst
Itertools ========= Extra iterator adaptors, functions and macros. Please read the `API documentation here`__ __ https://docs.rs/itertools/ |build_status|_ |crates|_ .. |build_status| image:: https://travis-ci.org/bluss/rust-itertools.svg?branch=master .. _build_status: https://travis-ci.org/bluss/rust-itertools .. |crates| image:: http://meritbadge.herokuapp.com/itertools .. _crates: https://crates.io/crates/itertools How to use with cargo: .. code:: toml [dependencies] itertools = "0.7.3" How to use in your crate: .. code:: rust #[macro_use] extern crate itertools; use itertools::Itertools; How to contribute: - Fix a bug or implement a new thing - Include tests for your new feature, preferably a quickcheck test - Make a Pull Request Recent Changes -------------- - 0.7.6 - Add new adaptor ``.multi_cartesian_product()`` which is an n-ary product iterator by @tobz1000 - Add new method ``.sorted_by_key()`` by @Xion - Provide simpler and faster ``.count()`` for ``.unique()`` and ``.unique_by()`` - 0.7.5 - ``.multipeek()`` now implements ``PeekingNext``, by @nicopap. - 0.7.4 - Add new adaptor ``.update()`` by @lucasem; this adaptor is used to modify an element before passing it on in an iterator chain. - 0.7.3 - Add new method ``.collect_tuple()`` by @matklad; it makes a tuple out of the iterator's elements if the number of them matches **exactly**. - Implement ``fold`` and ``collect`` for ``.map_results()`` which means it reuses the code of the standard ``.map()`` for these methods. - 0.7.2 - Add new adaptor ``.merge_join_by`` by @srijs; a heterogeneous merge join for two ordered sequences. - 0.7.1 - Iterator adaptors and iterators in itertools now use the same ``must_use`` reminder that the standard library adaptors do, by @matematikaedit and @bluss *“iterator adaptors are lazy and do nothing unless consumed”*. - 0.7.0 - Faster ``izip!()`` by @krdln - ``izip!()`` is now a wrapper for repeated regular ``.zip()`` and a single ``.map()``. This means it optimizes as well as the standard library ``.zip()`` it uses. **Note:** ``multizip`` and ``izip!()`` are now different! The former has a named type but the latter optimizes better. - Faster ``.unique()`` - ``no_std`` support, which is opt-in! - Many lovable features are still there without std, like ``izip!()`` or ``.format()`` or ``.merge()``, but not those that use collections. - Trait bounds were required up front instead of just on the type: ``group_by``'s ``PartialEq`` by @Phlosioneer and ``repeat_call``'s ``FnMut``. - Removed deprecated constructor ``Zip::new`` — use ``izip!()`` or ``multizip()`` - 0.6.5 - Fix bug in ``.cartesian_product()``'s fold (which only was visible for unfused iterators). - 0.6.4 - Add specific ``fold`` implementations for ``.cartesian_product()`` and ``cons_tuples()``, which improves their performance in fold, foreach, and iterator consumers derived from them. - 0.6.3 - Add iterator adaptor ``.positions(predicate)`` by @tmccombs - 0.6.2 - Add function ``process_results`` which can “lift” a function of the regular values of an iterator so that it can process the ``Ok`` values from an iterator of ``Results`` instead, by @shepmaster - Add iterator method ``.concat()`` which combines all iterator elements into a single collection using the ``Extend`` trait, by @srijs - 0.6.1 - Better size hint testing and subsequent size hint bugfixes by @rkarp. Fixes bugs in product, interleave_shortest size hints. - New iterator method ``.all_equal()`` by @phimuemue - 0.6.0 - Deprecated names were removed in favour of their replacements - ``.flatten()`` does not implement double ended iteration anymore - ``.fold_while()`` uses ``&mut self`` and returns ``FoldWhile<T>``, for composability (#168) - ``.foreach()`` and ``.fold1()`` use ``self``, like ``.fold()`` does. - ``.combinations(0)`` now produces a single empty vector. (#174) - 0.5.10 - Add itertools method ``.kmerge_by()`` (and corresponding free function) - Relaxed trait requirement of ``.kmerge()`` and ``.minmax()`` to PartialOrd. - 0.5.9 - Add multipeek method ``.reset_peek()`` - Add categories - 0.5.8 - Add iterator adaptor ``.peeking_take_while()`` and its trait ``PeekingNext``. - 0.5.7 - Add iterator adaptor ``.with_position()`` - Fix multipeek's performance for long peeks by using ``VecDeque``. - 0.5.6 - Add ``.map_results()`` - 0.5.5 - Many more adaptors now implement ``Debug`` - Add free function constructor ``repeat_n``. ``RepeatN::new`` is now deprecated. - 0.5.4 - Add infinite generator function ``iterate``, that takes a seed and a closure. - 0.5.3 - Special-cased ``.fold()`` for flatten and put back. ``.foreach()`` now uses fold on the iterator, to pick up any iterator specific loop implementation. - ``.combinations(n)`` asserts up front that ``n != 0``, instead of running into an error on the second iterator element. - 0.5.2 - Add ``.tuples::<T>()`` that iterates by two, three or four elements at a time (where ``T`` is a tuple type). - Add ``.tuple_windows::<T>()`` that iterates using a window of the two, three or four most recent elements. - Add ``.next_tuple::<T>()`` method, that picks the next two, three or four elements in one go. - ``.interleave()`` now has an accurate size hint. - 0.5.1 - Workaround module/function name clash that made racer crash on completing itertools. Only internal changes needed. - 0.5.0 - `Release announcement <http://bluss.github.io/rust/2016/09/26/itertools-0.5.0/>`_ - Renamed: - combinations is now tuple_combinations - combinations_n to combinations - group_by_lazy, chunks_lazy to group_by, chunks - Unfold::new to unfold() - RepeatCall::new to repeat_call() - Zip::new to multizip - PutBack::new, PutBackN::new to put_back, put_back_n - PutBack::with_value is now a builder setter, not a constructor - MultiPeek::new, .multipeek() to multipeek() - format to format_with and format_default to format - .into_rc() to rciter - ``Partition`` enum is now ``Either`` - Module reorganization: - All iterator structs are under ``itertools::structs`` but also reexported to the top level, for backwards compatibility - All free functions are reexported at the root, ``itertools::free`` will be removed in the next version - Removed: - ZipSlices, use .zip() instead - .enumerate_from(), ZipTrusted, due to being unstable - .mend_slices(), moved to crate odds - Stride, StrideMut, moved to crate odds - linspace(), moved to crate itertools-num - .sort_by(), use .sorted_by() - .is_empty_hint(), use .size_hint() - .dropn(), use .dropping() - .map_fn(), use .map() - .slice(), use .take() / .skip() - helper traits in misc - ``new`` constructors on iterator structs, use Itertools trait or free functions instead - ``itertools::size_hint`` is now private - Behaviour changes: - format and format_with helpers now panic if you try to format them more than once. - ``repeat_call`` is not double ended anymore - New features: - tuple flattening iterator is constructible with ``cons_tuples`` - itertools reexports ``Either`` from the ``either`` crate. ``Either<L, R>`` is an iterator when ``L, R`` are. - ``MinMaxResult`` now implements Copy and Clone - tuple_combinations supports 1-4 tuples of combinations (previously just 2) - 0.4.19 - Add ``.minmax_by()`` - Add ``itertools::free::cloned`` - Add ``itertools::free::rciter`` - Improve ``.step(n)`` slightly to take advantage of specialized Fuse better. - 0.4.18 - Only changes related to the "unstable" crate feature. This feature is more or less deprecated. - Use deprecated warnings when unstable is enabled. .enumerate_from() will be removed imminently since it's using a deprecated libstd trait. - 0.4.17 - Fix bug in .kmerge() that caused it to often produce the wrong order (#134) - 0.4.16 - Improve precision of the interleave_shortest adaptor's size hint (it is now computed exactly when possible). - 0.4.15 - Fixup on top of the workaround in 0.4.14. A function in itertools::free was removed by mistake and now it is added back again. - 0.4.14 - Workaround an upstream regression in a rust nightly build that broke compilation of of itertools::free::{interleave, merge} - 0.4.13 - Add .minmax() and .minmax_by_key(), iterator methods for finding both minimum and maximum in one scan. - Add .format_default(), a simpler version of .format() (lazy formatting for iterators). - 0.4.12 - Add .zip_eq(), an adaptor like .zip() except it ensures iterators of inequal length don't pass silently (instead it panics). - Add .fold_while(), an iterator method that is a fold that can short-circuit. - Add .partition_map(), an iterator method that can separate elements into two collections. - 0.4.11 - Add .get() for Stride{,Mut} and .get_mut() for StrideMut - 0.4.10 - Improve performance of .kmerge() - 0.4.9 - Add k-ary merge adaptor .kmerge() - Fix a bug in .islice() with ranges a..b where a > b. - 0.4.8 - Implement Clone, Debug for Linspace - 0.4.7 - Add function diff_with() that compares two iterators - Add .combinations_n(), an n-ary combinations iterator - Add methods PutBack::with_value and PutBack::into_parts. - 0.4.6 - Add method .sorted() - Add module ``itertools::free`` with free function variants of common iterator adaptors and methods. For example ``enumerate(iterable)``, ``rev(iterable)``, and so on. - 0.4.5 - Add .flatten() - 0.4.4 - Allow composing ZipSlices with itself - 0.4.3 - Write iproduct!() as a single expression; this allows temporary values in its arguments. - 0.4.2 - Add .fold_options() - Require Rust 1.1 or later - 0.4.1 - Update .dropping() to take advantage of .nth() - 0.4.0 - .merge(), .unique() and .dedup() now perform better due to not using function pointers - Add free functions enumerate() and rev() - Breaking changes: - Return types of .merge() and .merge_by() renamed and changed - Method Merge::new removed - .merge_by() now takes a closure that returns bool. - Return type of .dedup() changed - Return type of .mend_slices() changed - Return type of .unique() changed - Removed function times(), struct Times: use a range instead - Removed deprecated macro icompr!() - Removed deprecated FnMap and method .fn_map(): use .map_fn() - .interleave_shortest() is no longer guaranteed to act like fused - 0.3.25 - Rename .sort_by() to .sorted_by(). Old name is deprecated. - Fix well-formedness warnings from RFC 1214, no user visible impact - 0.3.24 - Improve performance of .merge()'s ordering function slightly - 0.3.23 - Added .chunks(), similar to (and based on) .group_by_lazy(). - Tweak linspace to match numpy.linspace and make it double ended. - 0.3.22 - Added ZipSlices, a fast zip for slices - 0.3.21 - Remove `Debug` impl for `Format`, it will have different use later - 0.3.20 - Optimize .group_by_lazy() - 0.3.19 - Added .group_by_lazy(), a possibly nonallocating group by - Added .format(), a nonallocating formatting helper for iterators - Remove uses of RandomAccessIterator since it has been deprecated in rust. - 0.3.17 - Added (adopted) Unfold from rust - 0.3.16 - Added adaptors .unique(), .unique_by() - 0.3.15 - Added method .sort_by() - 0.3.14 - Added adaptor .while_some() - 0.3.13 - Added adaptor .interleave_shortest() - Added adaptor .pad_using() - 0.3.11 - Added assert_equal function - 0.3.10 - Bugfix .combinations() size_hint. - 0.3.8 - Added source RepeatCall - 0.3.7 - Added adaptor PutBackN - Added adaptor .combinations() - 0.3.6 - Added itertools::partition, partition a sequence in place based on a predicate. - Deprecate icompr!() with no replacement. - 0.3.5 - .map_fn() replaces deprecated .fn_map(). - 0.3.4 - .take_while_ref() *by-ref adaptor* - .coalesce() *adaptor* - .mend_slices() *adaptor* - 0.3.3 - .dropping_back() *method* - .fold1() *method* - .is_empty_hint() *method* License ------- Dual-licensed to be compatible with the Rust project. Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.