一个字符串向量中的 join 操作符的等效方法是什么?

272

我找不到Rust中用于将String向量合并的“join”运算符的等效方法。我有一个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个回答

360
在 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版本之前,该方法被称为{{link1:connect}}:

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

请注意,您不需要导入任何内容,因为这些方法已经被标准库prelude自动导入。 join复制向量的元素,而不是移动它们,因此它保留了向量的内容,而不是破坏它。

8
也许现在已经有所改变,但是SliceConcatExt仅限于使用夜版。 - user707650
5
这个特性被标记为不稳定,但是它的方法是稳定的,所以你可以使用它们。你不需要显式地 use 这个特性,因为它在预导入中已经包含了。 - interjay
1
@shepmaster 如果我正确地阅读了您的“回复”,那么itertools中有一个 join函数。 - Steve Powell
1
@StevePowell 是的。评论是短暂的,但问答不是。将带有示例的答案链接到页面上,对于网站和所有未来的访问者来说都比在评论中放置随机答案更好,因为评论会被删除。问答可以得到赞同,以便让未来的人知道答案有用,并鼓励更多的参与。 - Shepmaster
7
谢谢@shepmaster。不幸的是,你对另一个答案的简单引用有些晦涩,因此不清楚那个答案的哪一部分是相关的。尽管您的评论,更正和回答总是很好,但您的风格让人感到居高临下并且有些令人反感。 - Steve Powell
显示剩余5条评论

32

这些链接已经失效。 - YoTengoUnLCD

16

来自itertools crate的一个函数也被称为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)
}

12
使用此代码的用户应该意识到它会分配一个可能很大的字符串,然后将其丢弃。直接将字符串写入输出更有效率。另请参见Rust中以空格分隔迭代器的惯用方法是什么?在Rust中,在容器中的每个值之间打印东西的最佳方法是什么? - Shepmaster
3
明白了,尽管问题是关于“连接(join)”的,而不是如何优化格式化算法的方法,是吧? - Nick Linker
9
collectе’Њjoinж›өеү«дё”дёҚж·»еЉ д»»дҢ•дңқиµ–е…ізі»пәЊеЏҮеЏ‚иЂѓж­¤gistиү›иҰЊеџғ准测иҮ•гЂ‚ - murla
@murla 是的,但当 T 实现 Display 接口且分隔符是字符串时,源代码会很烦人,但 vec.join 不会为您转换它们。.iter().map(|x| x.to_string()).collect::<Vec<_>>().join(", ") - theonlygusti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接