Rust不能借用`var`作为可变的,因为它在使用zip的`&`引用后面

rbl8hiat  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(75)

代码为:

fn iter_and_make_feature_dataframe(df: &DataFrame) {
    // iter over rows
    // let columns = columns.unwrap_or(vec![]);
    let col_len = df.shape().1;
    let columns = df.get_column_names();

    let mut df = df.clone();
    df.as_single_chunk();

    let mut iters = df.iter().map(|s| s.iter()).collect::<Vec<_>>();

    let mut row: Vec<Vec<String>> = Vec::new();
    for row_idx in 0..df.height() {
        let mut c_row: Vec<String> = Vec::new();
        for iter in &mut iters.iter().zip(&columns) {
            let (value_iter, col_name) = iter;
            let value = value_iter
                .next()
                .expect("should have as many iterations as rows")
                .to_string();
            c_row.push(value);
        }

        // process row
    }
}

字符串
Rust Analyzer说道:

error[E0596]: cannot borrow `*value_iter` as mutable, as it is behind a `&` reference
  --> src/main.rs:24:25
   |
23 |               let (value_iter, col_name) = iter;
   |                    ---------- consider changing this binding's type to be: `&mut SeriesIter<'_>`
24 |               let value = value_iter
   |  _________________________^
25 | |                 .next()
   | |_______________________^ `value_iter` is a `&` reference, so the data it refers to cannot be borrowed as mutable


我该如何解决此问题?我想逐行处理一个 Dataframe ,并使用处理过的行创建一个新的 Dataframe 。

olhwl3o2

olhwl3o21#

您需要使用iter_mut()而不是iter()来推进迭代器:

for iter in iters.iter_mut().zip(&columns) {
    // ...
}

字符串

相关问题