y
в вашем примере не является Vec; Вы, наверное, забыли vec!
впереди. Кроме того, числа с плавающей запятой должны быть 1.0
не 1
.
Я не знаю, почему вы считаете это для l oop непростым, но если вам нужны другие способы:
Использование шаблон итератора
let y: Vec<[f64; 1]> = vec![[1.0], [2.0], [3.0], [4.0]];
let y2: Vec<f64> = y.iter().map(|&[f]| f).collect();
Использование unsafe
Поскольку [f64; 1]
и f64
имеют одинаковый размер (оба 8 байта), мы можем преобразовать Vec
напрямую:
let y: Vec<[f64; 1]> = vec![[1.0], [2.0], [3.0], [4.0]];
let y2 = unsafe {
// Ensure the original vector is not dropped.
let mut y = std::mem::ManuallyDrop::new(y);
Vec::from_raw_parts(y.as_mut_ptr() as *mut f64,
y.len(),
y.capacity())
};
Это более сложно, но при этом будет повторно использоваться одна и та же память без копирования.