如何将Vec <Vec <i32 >>传递给函数?

cam*_*car 0 vector rust

给出i32s 的2D向量:

let v = vec![
    vec![1, 1, 1], 
    vec![0, 1, 0], 
    vec![0, 1, 0],
];
Run Code Online (Sandbox Code Playgroud)

如何将其传递给函数以最终打印其详细信息?我试过了:

fn printVector(vector: &[[i32]]) {
    println!("Length{}", vector.len())
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ann 7

您可以使用它接受的切片功能T,其中T也可以作为一个参考片:

fn print_vector<T>(value: &[T])
where
    T: AsRef<[i32]>,
{
    for slice in value {
        println!("{:?}", slice.as_ref())
    }
}
Run Code Online (Sandbox Code Playgroud)

操场

如果你想接受任何类型而不仅仅是i32,你也可以概括一下:

fn print_vector<T, D>(value: &[T])
where
    T: AsRef<[D]>,
    D: Debug,
{
    for slice in value {
        println!("{:?}", slice.as_ref())
    }
}
Run Code Online (Sandbox Code Playgroud)

操场


Igo*_*dov 5

由于您要将向量传递给函数,因此以下代码应该可以工作:

fn print_vector(vector: Vec<Vec<i32>>) {
    println!("Length{}", vector.len())
}
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一接受“Vec”作为参数而不是对 Vec 的引用的答案。 (3认同)