Guest User

Untitled

a guest
Jan 18th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. let v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
  2. v.iter().rev().map(|s| s.clone()).collect::<Vec<String>>().connect(".")
  3.  
  4. pub trait InterleaveExt: Iterator + Sized {
  5. fn interleave(self, value: Self::Item) -> Interleave<Self> {
  6. Interleave {
  7. iter: self.peekable(),
  8. value: value,
  9. me_next: false,
  10. }
  11. }
  12. }
  13.  
  14. impl<I: Iterator> InterleaveExt for I {}
  15.  
  16. pub struct Interleave<I>
  17. where
  18. I: Iterator,
  19. {
  20. iter: std::iter::Peekable<I>,
  21. value: I::Item,
  22. me_next: bool,
  23. }
  24.  
  25. impl<I> Iterator for Interleave<I>
  26. where
  27. I: Iterator,
  28. I::Item: Clone,
  29. {
  30. type Item = I::Item;
  31.  
  32. #[inline]
  33. fn next(&mut self) -> Option<Self::Item> {
  34. // Don't return a value if there's no next item
  35. if let None = self.iter.peek() {
  36. return None;
  37. }
  38.  
  39. let next = if self.me_next {
  40. Some(self.value.clone())
  41. } else {
  42. self.iter.next()
  43. };
  44.  
  45. self.me_next = !self.me_next;
  46. next
  47. }
  48. }
  49.  
  50. fn main() {
  51. let a = &["a", "b", "c"];
  52. let s: String = a.iter().cloned().rev().interleave(".").collect();
  53. println!("{}", s);
  54.  
  55. let v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
  56. let s: String = v.iter().map(|s| s.as_str()).rev().interleave(".").collect();
  57. println!("{}", s);
  58. }
  59.  
  60. let mut v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
  61. v.reverse();
  62. println!("{}", v.join("."))
  63.  
  64. fn main() {
  65. let v = vec!["a".to_string(), "b".to_string(), "c".to_string()];
  66. let mut r = v.iter()
  67. .rev()
  68. .fold(String::new(), |r, c| r + c.as_str() + ".");
  69. r.pop();
  70. println!("{}", r);
  71. }
  72.  
  73. use itertools::Itertools;
  74. let v = ["a", "b", "c"];
  75. let connected = v.iter().rev().join(".");
Add Comment
Please, Sign In to add comment