gpt4 book ai didi

arrays - 如何从 Rust 函数返回数组?

转载 作者:行者123 更新时间:2023-12-03 11:24:30 25 4
gpt4 key购买 nike

我想创建一个生成 X 数组的函数具有随机值的大小。

use rand::prelude::*;

fn generateArray(howManyValues: u32)->[f64]
{
let mut rng = rand::thread_rng();
let array: [f64, howManyValues];
for i in 0..howManyValues
{
array[i] = rng.gen()*100;
}

println!("{:?}", array);
return array;
}

fn main() {
generateArray(10);
}

最佳答案

I want to create a function that generates an array of X size with random values.


类型 [f64]slice ,而不是 array .数组需要一个长度,例如 [f64; 25] .
rust 的 Vec对于这项工作,可能比数组或切片更好,除非您使用某种外部函数接口(interface) (FFI),或者 Rust API 需要一个数组(它可能需要 Deref<Target = [T]> ,基本上对所有类似数组的类型都是通用的包括 Vec 和数组)。 Vec 类似于 C++ 的 std::vector , 和 Java 的 ArrayList .
use rand::prelude::*;

fn generate_vec(len: usize) -> Vec<f64> {
let mut rng = rand::thread_rng();
let mut vec = Vec::with_capacity(len);
for _ in 0..len {
vec.push(rng.gen::<f64>() * 100.);
}
return vec;
}

fn main() {
let generated_vec = generate_vec(10);
println!("{:?}", generated_vec);
}

我做了一些风格改变[1]。如果你 真的想要一个数组,请继续阅读。
如果您在编译时知道数组的大小,则可以使用数组。如果它太大而无法放入堆栈,则会出现堆栈溢出。 Rust 1.51 使用 const generics 使其更符合人体工程学。 .
use rand::prelude::*;

fn generate_array<const LEN: usize>() -> [f64; LEN] {
let mut rng = rand::thread_rng();
let mut arr = [0.; LEN];
for item in arr.iter_mut() {
*item = rng.gen::<f64>() * 100.;
}
arr
}

fn main() {
// generate_array can make an array of any length (within stack size limits)
let generated_array1:[f64; 5] = generate_array();
let generated_array2:[f64; 10] = generate_array();
println!("{:?}", generated_array2);
}
如果您在编译时不知道长度,或者它太大而无法放入堆栈,那么您可以获得的最接近数组的位置是 Box<[T]> ( Box 的切片 T )使用 into_boxed_slice() .
use rand::prelude::*;

fn generate_array(len: usize) -> Box<[f64]> {
let mut rng = rand::thread_rng();
let mut vec = Vec::with_capacity(len);
for _ in 0..len {
vec.push(rng.gen::<f64>() * 100.);
}
vec.into_boxed_slice()
}

fn main() {
let generated_array = generate_array(10);
println!("{:?}", generated_array);
}
[1] 函数名称中的单词用下划线而不是驼峰式分隔,移动 printlnmain()并将 len 的类型更改为 usize ,因为这是在 Rust 中通常索引数组的方式。

关于arrays - 如何从 Rust 函数返回数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59164456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com