【发布时间】:2019-10-13 21:05:01
【问题描述】:
我想在 Rust 中编写一个函数,它将返回由起始整数、所有中间整数和结束整数组成的向量。它应该持有的断言是这样的:
assert_eq!(intervals(0, 4, 1..4), vec![0, 1, 2, 3, 4]);
提示是对迭代器使用链式方法。函数声明是预定义的,我用一种方式实现,代码如下:
pub fn intervals< I>(start: u32, end: u32, intermediate: I) -> Vec<u32>
where
I: IntoIterator<Item = u32>,
{
let mut a1 = vec![];
a1.push(start);
let inter: Vec<u32> = intermediate.into_iter().collect();
let mut iter : Vec<u32> = a1.iter().chain(inter.iter()).map(|x| *x).collect();
iter.push(end);
return iter;
}
但我非常确信这并不是真正的最佳方式。我确信我在中间两行做了很多不必要的事情。我尝试像这样直接使用中间:
let mut iter: Vec<u32> = a1.iter().chain(intermediate).map(|x| *x).collect();
但是我收到了链方法的这个错误,我不知道如何解决它:
type mismatch resolving <I as std::iter::IntoIterator>::Item==&u32,
expected u32, found &u32
我是 Rust 的超级新手,所以任何建议都有助于理解在这里使用中间参数的正确方法。
【问题讨论】: