首页 > 解决方案 > 如何返回 Vec来自锈迹斑斑的收藏品?

问题描述

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

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

这会产生以下错误:

类型的值std::string::String不能从类型元素的迭代器中构建&[std::string::String]

类型的值std::string::String不能从std::iter::Iterator<Item=&[std::string::String]>

help:std::iter::FromIterator<&[std::string::String]>没有为std::string::Stringrustc(E0277)实现 trait

标签: rustrust-cargo

解决方案


的类型参数collect()是应该将整个事物收集到的内容。所以参数tocollect和实际类型是多余的,只需要一个。

然而,Rust 不想猜测应该如何chunks改变或改变什么:这里有一个切片迭代器( 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.


推荐阅读