MST

星途 面试题库

面试题:Rust数组隐式转换的基础规则应用

在Rust中,给定一个`i32`类型的数组`[1, 2, 3]`,如果希望将其隐式转换为另一种类型的数组(假设存在合理的隐式转换情况),请阐述可能涉及到的隐式转换规则,并编写一段代码示例来展示这种转换。
40.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

隐式转换规则

在Rust中,隐式转换并不像其他语言那样常见。不过,对于数字类型,Rust有一些内置的转换特性,例如从较小范围的整数类型转换到较大范围的整数类型,这通常是安全的。对于数组,如果存在从i32到目标类型的合理转换(比如i64,因为i32可以无损转换为i64),可以使用map方法来遍历数组并执行转换。

代码示例

fn main() {
    let i32_array: [i32; 3] = [1, 2, 3];
    let i64_array: Vec<i64> = i32_array.iter().map(|&x| x as i64).collect();
    println!("{:?}", i64_array);
}

在上述代码中,我们将i32类型的数组i32_array通过map方法转换为i64类型的Vec。这里使用iter方法来遍历i32_arraymap方法对每个元素执行as i64的转换,最后使用collect方法将结果收集到Vec<i64>中。

请注意,如果要转换为固定长度数组,需要手动指定数组长度,如下:

fn main() {
    let i32_array: [i32; 3] = [1, 2, 3];
    let mut i64_array: [i64; 3] = [0; 3];
    for (i, &num) in i32_array.iter().enumerate() {
        i64_array[i] = num as i64;
    }
    println!("{:?}", i64_array);
}

这段代码通过遍历i32_array并将转换后的元素赋值给i64_array,实现了将i32类型固定长度数组转换为i64类型固定长度数组。