Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn cartesian<F, G, I, J, T, U>(x: F, y: G) -> Vec<(T, U)>
- where
- I: IntoIterator<Item=T>,
- J: IntoIterator<Item=U>,
- F: Fn() -> I,
- G: Fn() -> J,
- T: Clone
- {
- x().into_iter().map(
- |xp| y().into_iter().map(
- move |yp| (xp.clone(), yp)
- )
- ).flat_map(|i| i).collect()
- }
- fn main() {
- let v1 = vec![String::from("foo"), String::from("bar")];
- let v2 = vec![String::from("baz"), String::from("qux")];
- let it = cartesian(|| v1.iter(), || v2.iter());
- for item in it {
- let (s1, s2) = item;
- println!("{} {}", s1, s2)
- }
- }
Add Comment
Please, Sign In to add comment