我无法找到Rust的“join”操作符在字符串向量上的等效。我有一个Vec<字符串>,我想加入他们作为一个单一的字符串:

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

相关:

在Rust中,用空格分隔的迭代器的惯用方法是什么?


当前回答

在Rust 1.3.0及以后版本中,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之前,这个方法被称为connect:

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

注意,您不需要导入任何东西,因为这些方法是由标准库序言自动导入的。

其他回答

在Rust 1.3.0及以后版本中,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之前,这个方法被称为connect:

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

注意,您不需要导入任何东西,因为这些方法是由标准库序言自动导入的。

正如Wilfred所提到的,SliceConcatExt::connect从1.3.0版本开始就被弃用了,取而代之的是SliceConcatExt::join:

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

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)
}