如何从 Rust 集合中 return Vec<String>?

How to return a Vec<String> from a collection in rust?

这里我把vec拆分成大小为4的子向量然后返回一个集合,我希望集合返回的类型是Vec<String>。我该怎么做?

let mut split_operations : Vec<String> = vec[2..].chunks(4).collect::<String>();

这会产生以下错误:

std::string::String 类型的值不能从 &[std::string::String]

类型元素的迭代器中构建

无法从 std::iter::Iterator<Item=&[std::string::String]>

构建类型 std::string::String 的值

帮助:特性 std::iter::FromIterator<&[std::string::String]> 没有为 std::string::Stringrustc(E0277)

实现

collect() 的类型参数是应该收集整个东西的类型。所以collect的参数和实际类型是多余的,只需要一个。

然而 Rust 不想猜测 chunks 应该如何改变或改变什么:这里你有一个 slices 的迭代器(Iterator<Item=&[String]).您可以将 Iterator<Item=String> 收集到 Vec<String> 或单个 String (它将连接所有项目),但中间切片意味着 Rust 不知道应该发生什么。

如果你想让每个块变成一个字符串,你需要在map中明确地做到这一点,例如

    let mut split_operations : Vec<String> = vec[2..].chunks(4)
        .map(|c| c.concat())
        .collect();

如果你想玩(和/或激怒你的同事),你也可以将地图回调写成<[_]>::concat