在一个字符串向量上,连接运算符的等价物是什么?

时间:2015-02-04 01:20:00

标签: string rust

我无法找到&#34;加入&#34; String s向量上的运算符。我有一个Vec<String>,我希望将它们作为单个String加入:

let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);

相关:

3 个答案:

答案 0 :(得分:93)

在Rust 1.3.0及更高版本中,SliceConcatExt::join可用:

fn main() {
    let string_list = vec!["Foo".to_string(),"Bar".to_string()];
    let joined = string_list.join("-");
    assert_eq!("Foo-Bar", joined);
}

在1.3.0之前,您可以使用SliceConcatExt::connect

let joined = string_list.connect("-");

请注意,您不需要任何导入,因为standard library prelude会自动导入方法。

答案 1 :(得分:21)

正如Wilfred所述,自{1.3}版以来,SliceConcatExt::connect已被弃用,而SliceConcatExt::join支持{/ 3}}。

let joined = string_list.join("-");

答案 2 :(得分:1)

itertools包装箱中有一个函数也称为join,该函数加入了迭代器:

extern crate itertools; // 0.7.8

use itertools::free::join;
use std::fmt;

pub struct MyScores {
    scores: Vec<i16>,
}

impl fmt::Display for MyScores {
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        fmt.write_str("MyScores(")?;
        fmt.write_str(&join(&self.scores[..], &","))?;
        fmt.write_str(")")?;
        Ok(())
    }
}

fn main() {
    let my_scores = MyScores {
        scores: vec![12, 23, 34, 45],
    };
    println!("{}", my_scores); // outputs MyScores(12,23,34,45)
}