给出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())
}
答案 0 :(得分:7)
您可以使用接受T
切片的函数,其中T
也可以称为切片:
fn print_vector<T>(value: &[T])
where
T: AsRef<[i32]>,
{
for slice in value {
println!("{:?}", slice.as_ref())
}
}
如果您想接受任何类型而不仅仅是i32
,也可以对此进行概括:
fn print_vector<T, D>(value: &[T])
where
T: AsRef<[D]>,
D: Debug,
{
for slice in value {
println!("{:?}", slice.as_ref())
}
}
答案 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);
}
答案 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>]