首页 > 解决方案 > 将数组切片转换为切片数组

问题描述

我有一个固定大小的数组切片 ( &[[T; N]]),我希望能够将其视为切片数组 ( [&[T]; N])。输出数组的第i-th 元素将是i原始切片中每个数组的所有第 -th 项的切片:

fn magic_operation<T, const N: usize>(input: &[[T; N]]) -> [&[T]; N] {
    todo!()
}

let original = &[
    [10, 11, 12],
    [20, 21, 22],
    [30, 31, 32],
    [40, 41, 42],
    [50, 51, 52],
];

let new_view = magic_operation(original);

assert_eq!(new_view, [
    &[10, 20, 30, 40, 50],
    &[11, 21, 31, 41, 51],
    &[12, 22, 32, 42, 52],
]);

我不知道这是否暴露在任何 stdlib 方法中,而且我对不安全的 Rust 了解不足,无法自己尝试解决这个问题。这是否可能实现,也许是使用具有不同内存步幅的切片?

标签: arraysrustslice

解决方案


这是不可能的。

切片中的 Rust 元素是连续的;没有多余的空格。为了返回 a &[10, 20, 30, 40, 50],那么该元素序列必须存在于其他地方才能引用它们。该序列在原始输入中不存在。


推荐阅读