将2d固定大小的数组转换为切片

时间:2016-08-03 14:38:13

标签: rust

使用1维数组,可以将固定大小的数组转换为切片,但是这可能会以简单的方式使用2d数组吗?

Integer.toOctalString()

1 个答案:

答案 0 :(得分:2)

这样做没有琐碎的方法(对于一些微不足道的定义)。问题是&[&[usize]]是一片切片(如jagged array),而[[0usize; 10]; 10]是一个二维数组。 2D数组中的数据是连续的,一行在前一行结束后开始,并且所有行具有相同数量的元素。在锯齿状数组中,每一行都可以有不同的长度,并且这个长度必须与每一行一起存储(在Rust中,切片是长度和指针)。

那就是说,你可以改变foo的定义(这是最好的选择,因为没有额外的分配):

// a slice of T, where T can be used as &[usize]
fn foo<T>(r: &[T])
    where T: AsRef<[usize]>
{
    for line in r {
        println!("{:?}", line.as_ref());
    }
}

fn main() {
    let r = [[0usize; 10]; 10];
    foo(&r);
}

或创建切片的临时矢量:

fn foo(r: &[&[usize]]) {
    for line in r {
        println!("{:?}", line);
    }
}

fn main() {
    let r = [[0usize; 10]; 10];
    let x: Vec<&[usize]> = r.iter().map(|v| v.as_ref()).collect();
    foo(&x);
}