質問内容
Rust でベクトルを走査して、条件を満たすインデックスを得るということをしたいと思っています。
rust
1fn my_func(nums: Vec<i32>, target: i32) -> Vec<i32> { 2 for i in 0..(nums.len() - 1) { 3 for j in i..nums.len() { 4 if nums[i] + nums[j] == target { 5 return vec![i, j]; 6 } 7 } 8 } 9}
しかし、i, jはusize型なので返り値の型がエラーになります。これはネット上の問題として解いているので返り値の型は出題側に決められていて変えることができません。なので何とかしてusize -> i32 にキャストしたいのですが方法がわかりません。
Rust 自体が初心者なのでこの考え方自体があっているかどうかも知りたいです。よろしくお願いします。
(追記) エラーメッセージ
bash
1error[E0308]: mismatched types 2 --> src/main.rs:5:29 3 | 45 | return vec![i, j]; 5 | ^ expected i32, found usize 6 7error[E0308]: mismatched types 8 --> src/main.rs:2:5 9 | 101 | fn my_func(nums: Vec<i32>, target: i32) -> Vec<i32> { 11 | -------- expected `std::vec::Vec<i32>` because of return type 122 | / for i in 0..(nums.len() - 1) { 133 | | for j in i..nums.len() { 144 | | if nums[i] + nums[j] == target { 155 | | return vec![i, j]; 16... | 178 | | 189 | | } 19 | |_____^ expected struct `std::vec::Vec`, found () 20 | 21 = note: expected type `std::vec::Vec<i32>` 22 found type `()` 23 24error: aborting due to 2 previous errors 25 26For more information about this error, try `rustc --explain E0308`.
試したこと: as で usize -> i32 へ変換する
rust
1let ans1 = i as i32; 2let ans2 = j as i32; 3 4return vec![ans1, ans2];
をif文の中に入れたところ次のようなエラーが出ました。
bash
1error[E0308]: mismatched types 2 --> src/main.rs:2:5 3 | 41 | fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> { 5 | -------- expected `std::vec::Vec<i32>` because of return type 62 | / for i in 0..(nums.len() - 1) { 73 | | for j in i..nums.len() { 84 | | if nums[i] + nums[j] == target { 95 | | let ans1 = i as i32; 10... | 1110 | | 1211 | | } 13 | |_____^ expected struct `std::vec::Vec`, found () 14 | 15 = note: expected type `std::vec::Vec<i32>` 16 found type `()` 17 18error: aborting due to previous error 19For more information about this error, try `rustc --explain E0308`.
質問のコードを実行すると、どのようなエラーが出るのでしょうか?
回答3件
あなたの回答
tips
プレビュー