2017-11-17 4 views
1

Rustで多次元ベクトルの内容を出力しようとすると、ベクトルとしてVec<Vec<str>>を使用できないように見えます。このコードでは文字列のベクトルは、 "strはコンパイル時に既知の定数サイズを持たない"というエラーを報告します

fn print_multidimensional_array(multi: &Vec<Vec<str>>) { 
    for y in 0..multi.len() { 
     for x in 0..multi[y].len() { 
      print!("{} ", multi[y][x]); 
     } 
     println!(""); 
    } 
} 

、私は出力を得る:

error[E0277]: the trait bound `str: std::marker::Sized` is not satisfied 
--> src/main.rs:1:1 
    | 
1 |/fn print_multidimensional_array(multi: &Vec<Vec<str>>) { 
2 | |  for y in 0..multi.len() { 
3 | |   for x in 0..multi[y].len() { 
4 | |    print!("{} ", multi[y][x]); 
... | 
7 | |  } 
8 | | } 
    | |_^ `str` does not have a constant size known at compile-time 
    | 
    = help: the trait `std::marker::Sized` is not implemented for `str` 
    = note: required by `std::vec::Vec` 

私が動作するように、このために使用することができ、ベクターの何種類?

+1

「Vec 」というタイプの処理にはどのようなプロセスがありましたか? – Shepmaster

+2

そして***推測でRustを習得するのではなく、[* The Rust Programming Language *](https://doc.rust-lang.org/stable/book/secondedition/)を読んでください。 -チェック。 – Shepmaster

答えて

1

Vec<Vec<&str>>を使用してください。

fn print_multidimensional_array(multi: &[Vec<&str>]) { 
    for y in multi { 
     for v in y { 
      print!("{} ", v); 
     } 
     println!(); 
    } 
} 

fn main() { 
    let v = vec![vec!["a", "b"], vec!["c", "d"]]; 
    print_multidimensional_array(&v); 
} 

も参照してください:


私は過度に一般的なものを作るのが好きなので...

fn print_multidimensional_array<I>(multi: I) 
where 
    I: IntoIterator, 
    I::Item: IntoIterator, 
    <I::Item as IntoIterator>::Item: AsRef<str>, 
{ 
    for y in multi { 
     for v in y { 
      print!("{} ", v.as_ref()); 
     } 
     println!(); 
    } 
} 

fn main() { 
    let v1 = vec![vec!["a", "b"], vec!["c", "d"]]; 
    let v2 = vec![["a", "b"], ["c", "d"]]; 
    let v3 = [vec!["a", "b"], vec!["c", "d"]]; 
    let v4 = [["a", "b"], ["c", "d"]]; 

    print_multidimensional_array(&v1); 
    print_multidimensional_array(&v2); 
    print_multidimensional_array(&v3); 
    print_multidimensional_array(&v4); 
} 
+0

ありがとう、これは完全に動作します。私は本当にベクトルタイピングをよく理解していないと思うので、これは役に立ちます。 –

関連する問題