Я хочу написать функцию в 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, поэтому любой совет будет полезен, чтобы понять, как правильно использовать здесь промежуточный параметр.