For loop 如何修复这两个for循环以允许修改向量内容?

For loop 如何修复这两个for循环以允许修改向量内容?,for-loop,rust,mutable,borrowing,For Loop,Rust,Mutable,Borrowing,我试着在向量中使用Vec生成的矩阵上做一个循环,然后逐个改变它的元素 我似乎无法使它工作;我对语法还是太困惑了 extern crate rand; use std::ptr; use std::mem; use rand::Rng; fn main() { let mut rng = rand::thread_rng(); let mut v: Vec<Vec<f64>> = Vec::new(); v.push(vec![0f64; 35

我试着在向量中使用
Vec
生成的矩阵上做一个循环,然后逐个改变它的元素

我似乎无法使它工作;我对语法还是太困惑了

extern crate rand;

use std::ptr;
use std::mem;

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let mut v: Vec<Vec<f64>> = Vec::new();
    v.push(vec![0f64; 35]);
    v.push(vec![0f64; 35]);
    v.push(vec![0f64; 35]);
    v.push(vec![0f64; 35]);

    let len = v.len();
    for &el in &v {
        for q in &mut el {
            q = rng.gen::<f64>();
            println!("{}", q);
        }
        println!("{:?}", el);
    }
    println!("float: {}", rng.gen::<f64>());
    //println!("vec: {:?}, len: {}",v,len);
}
extern板条箱兰德;
使用std::ptr;
使用std::mem;
使用rand::Rng;
fn main(){
让mut rng=rand::thread_rng();
让mut v:Vec=Vec::new();
v、 推(vec![0f64;35]);
v、 推(vec![0f64;35]);
v、 推(vec![0f64;35]);
v、 推(vec![0f64;35]);
设len=v.len();
用于输入和输出(&E){
对于q in&mut el{
q=rng.gen::();
println!(“{}”,q);
}
println!(“{:?}”,el);
}
println!(“float:{}”,rng.gen::());
//println!(“向量:{:?},len:{}”,v,len);
}
编译器说:

错误[E0308]:类型不匹配
-->src/main.rs:19:17
|
19 | q=一般规则:();
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期为f64
|
=注意:应为类型“”&mut f64`
找到类型`f64`
=帮助:尝试使用“&mut rng.gen::()`

我试着按照编译器提示,使用
mut&
.iter()
.iter\u mut()
的各种组合,但都不起作用。经过一些挫折之后,我注意到我对解决方案的搜索已经变成了蒙特卡罗算法

阅读错误消息-它们是静态类型语言的巨大优势,但它确实需要您实际查看它们

-->src/main.rs:19:17
|
19 | q=一般规则:();
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期为f64
|
=注意:应为类型“”&mut f64`
找到类型`f64`
=帮助:尝试使用“&mut rng.gen::()`
不幸的是,这里的“帮助”不是正确的路径,但它只是编译器的猜测

您正在尝试创建类型为
f64
的随机值,并将其分配给包含
&mut f64
的变量。这些是不同的类型,因此会出现错误

您需要取消引用变量以将其存储到其中:

extern crate rand;

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();

    let mut v = vec![
        vec![0f64; 35],
        vec![0f64; 35],
        vec![0f64; 35],
        vec![0f64; 35],
    ];

    for el in &mut v {
        for q in el {
            *q = rng.gen::<f64>();
        }   
    }

    println!("vec: {:?}", v);
}
extern板条箱兰德;
使用rand::Rng;
fn main(){
让mut rng=rand::thread_rng();
让mut v=vec[
向量![0f64;35],
向量![0f64;35],
向量![0f64;35],
向量![0f64;35],
];
用于el in和mut v{
对于el中的q{
*q=rng.gen::();
}   
}
println!(“向量:{:?}”,v);
}

我可能不会初始化任何东西,并将其编写为

let mut rng = rand::thread_rng();

let v: Vec<Vec<f64>> = (0..4)
    .map(|_| (0..35).map(|_| rng.gen()).collect())
    .collect();

println!("vec: {:?}", v);
让mut rng=rand::thread_rng();
设v:Vec=(0..4)
.map(| |(0..35).map(| | rng.gen()).collect())
.收集();
普林顿!(“vec:{:?}”,v);

非常感谢您重组代码并解释问题!我会尽快接受的。感谢您以函数式编程方式创建vec!如果可以,我会给2+1!