to_vec()in rust
2023-04-18
to_vec
is a crate that provides specialized implementations of collect
for common use cases when collecting into Vec
, HashSet
, or HashMap
containers. The main functionality can be broken down into:
-
ToVec
: Collects an iterator's items into aVec
. For example:#![allow(unused)] fn main() { use to_vec::ToVec; let v = "one two three".split_whitespace().to_vec(); assert_eq!(v, &["one", "two", "three"]); }
-
ToVecResult
: Collects an iterator ofResult<T, E>
into aResult<Vec<T>, E>
, where the error is the first error encountered.#![allow(unused)] fn main() { use to_vec::ToVecResult; let numbers = "23E 5F5 FF00".split_whitespace() .map(|s| u32::from_str_radix(s, 16)).to_vec_result().unwrap(); assert_eq!(numbers, &[0x23E, 0x5F5, 0xFF00]); }
Some other similar crates
-
ToSet
: Collects an iterator of references into aHashSet
, implicitly cloning the items.#![allow(unused)] fn main() { use to_vec::ToSet; let colours = ["green", "orange", "blue"].iter().to_set(); let fruit = ["apple", "banana", "orange"].iter().to_set(); let common = colours.intersection(&fruit).to_set(); assert_eq!(common, ["orange"].iter().to_set()); }
-
ToMap
: Collects an iterator of references to key-value pairs into aHashMap
, implicitly cloning the keys and values.#![allow(unused)] fn main() { use to_vec::ToMap; const VALUES: &[(&str, i32)] = &[("hello", 10), ("dolly", 20)]; let map = VALUES.iter().to_map(); assert_eq!(map.get("hello"), Some(&10)); assert_eq!(map.get("dolly"), Some(&20)); }
These specialized forms provide a more ergonomic and efficient way to collect iterators into commonly used containers.
This is done with the help of phined