1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! イテレータのutil

use std::fmt::{Debug, Display};

/// イテレータのツール
pub trait IterUtil: Iterator {
    /// 文字列として結合する
    fn join(&mut self, sep: &str) -> String
    where
        Self::Item: Display,
    {
        self.fold(String::new(), |mut s, v| {
            if s.is_empty() {
                s = format!("{}", v);
            } else {
                s += &format!("{}{}", sep, v);
            }
            s
        })
    }

    /// 文字列として結合する(デバッグ)
    fn join_debug(&mut self, sep: &str) -> String
    where
        Self::Item: Debug,
    {
        self.fold(String::new(), |mut s, v| {
            if s.is_empty() {
                s = format!("{:?}", v);
            } else {
                s += &format!("{}{:?}", sep, v);
            }
            s
        })
    }
}

impl<I: Iterator> IterUtil for I {}