Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
- v.iter().rev().map(|s| s.clone()).collect::<Vec<String>>().connect(".")
- pub trait InterleaveExt: Iterator + Sized {
- fn interleave(self, value: Self::Item) -> Interleave<Self> {
- Interleave {
- iter: self.peekable(),
- value: value,
- me_next: false,
- }
- }
- }
- impl<I: Iterator> InterleaveExt for I {}
- pub struct Interleave<I>
- where
- I: Iterator,
- {
- iter: std::iter::Peekable<I>,
- value: I::Item,
- me_next: bool,
- }
- impl<I> Iterator for Interleave<I>
- where
- I: Iterator,
- I::Item: Clone,
- {
- type Item = I::Item;
- #[inline]
- fn next(&mut self) -> Option<Self::Item> {
- // Don't return a value if there's no next item
- if let None = self.iter.peek() {
- return None;
- }
- let next = if self.me_next {
- Some(self.value.clone())
- } else {
- self.iter.next()
- };
- self.me_next = !self.me_next;
- next
- }
- }
- fn main() {
- let a = &["a", "b", "c"];
- let s: String = a.iter().cloned().rev().interleave(".").collect();
- println!("{}", s);
- let v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
- let s: String = v.iter().map(|s| s.as_str()).rev().interleave(".").collect();
- println!("{}", s);
- }
- let mut v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
- v.reverse();
- println!("{}", v.join("."))
- fn main() {
- let v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
- let mut r = v.iter()
- .rev()
- .fold(String::new(), |r, c| r + c.as_str() + ".");
- r.pop();
- println!("{}", r);
- }
- use itertools::Itertools;
- let v = ["a", "b", "c"];
- let connected = v.iter().rev().join(".");
Add Comment
Please, Sign In to add comment