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

时间:2018-08-15 12:59:56

标签: vector rust

给出i32 s的2D向量:

let v = vec![
    vec![1, 1, 1], 
    vec![0, 1, 0], 
    vec![0, 1, 0],
];

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

fn printVector(vector: &[[i32]]) {
    println!("Length{}", vector.len())
}

4 个答案:

答案 0 :(得分:7)

您可以使用接受T切片的函数,其中T也可以称为切片:

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

playground

如果您想接受任何类型而不仅仅是i32,也可以对此进行概括:

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

playground

答案 1 :(得分:4)

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

[HttpPost]
public ActionResult AddMessage([FromBody] ShoutboxMessage input)
{
    if (Request.Cookies["usrid"] == null)
        return this.RedirectToAction("Login");

    if (!string.IsNullOrWhiteSpace(input.Message))
    {
        //...
        return new EmptyResult();
    }
}

答案 2 :(得分:3)

您需要传递矢量的一个切片-&[Vec<i32>],而不是切片的一个切片:

fn print_vector(vector: &[Vec<i32>]) {
    println!("Length {}", vector.len())
}

fn main() {
    let v = vec![vec![1, 1, 1], vec![0, 1, 0], vec![0, 1, 0]];
    print_vector(&v);
}

Playground

答案 3 :(得分:0)

fn print_vector(vector: Vec<Vec<i32>>) {
    println!("Length{}", vector.len())
}

在此示例中,fn printVector(vector: &Vec<Vec<i32>>) { println!("Length{}", vector.len()) } let v = vec![ vec![1, 1, 1], vec![0, 1, 0], vec![0, 1, 0], ]; printVector(&v); &Vec<Vec<i32>没有区别;也许您想更改为此:

&[Vec<i32>]