rust 如何避免使用循环索引进行try_into().unwrap()转换?[duplicate]

eivgtgni  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(163)

此问题在此处已有答案

How do I convert between numeric types safely and idiomatically?(1个答案)
3天前关闭。
有没有更好的方法来使用ij for-in变量,避免使用std::convert::TryIntoreturn vec![i.try_into().unwrap(),j.try_into().unwrap()];来处理这些变量的预期结果和实际值类型之间的usize和i32转换问题?
模块和try_into()unwrap()函数的使用是因为编译器错误建议。但我想知道是否有其他方法来转换或转换数值。

use std::convert::TryInto;

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
       let mut current = 0;
       for i in 0..nums.len() - 1 {
           for j in 1..nums.len(){
               if j != i {
                   current = nums[i] + nums[j];
                   if current == target {
                       return vec![i.try_into().unwrap(),j.try_into().unwrap()];
                   }
               }
           }
       }
       vec![] 
    }
}
4xrmg8kj

4xrmg8kj1#

i as i32语法,但如果nums.len() > i32::MAX
其中i32::MAX = 2_147_483_647https://doc.rust-lang.org/std/i32/constant.MAX.html

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        nums.iter()
            .enumerate()
            .find_map(|(i, &x)| {
                nums.iter()
                    .enumerate()
                    .find(|(j, &y)| *j != i && (x + y) == target)
                    .map(|(j, _)| vec![i as i32, j as i32])
            })
            .unwrap_or_default()
    }
}

相关问题