Moving a field in elements of a vector that is owned by callee

⚓ Rust    📅 2025-08-29    👤 surdeus    👁️ 12      

surdeus

Warning

This post was published 95 days ago. The information described in this article may have changed.

How does one move (instead of clone) one field in each element of a vector to a new vector ?
Here is an example of what I am trying to do:

// StringInfo
#[derive(Debug, Clone)]
struct StringInfo {
    index : usize  ,
    value : String ,
}
//
// This method clones strings that will be dropped when it returns.
fn vec_string_info_clone( vec_string : Vec<String> ) -> Vec<StringInfo>
{   let mut vec_string_info : Vec<StringInfo> = Vec::new();
    for i in 0 .. vec_string.len() {
        vec_string_info.push(  StringInfo{ index : i, value : vec_string[i].clone() } );
    }
    vec_string_info
}
//
// This method does not clone the strings but 
// it returns the vector in the reverse of the desired order.
fn vec_string_info_pop( mut vec_string : Vec<String> ) -> Vec<StringInfo>
{   let mut vec_string_info : Vec<StringInfo> = Vec::new();
    let len = vec_string.len();
    for i in 0 .. len {
        let string = vec_string.pop().unwrap();
        vec_string_info.push(  StringInfo{ index : len - i - 1, value : string }  );
    }
    vec_string_info
}
fn main() {
    //
    let vec_string        = vec![ "zero".to_string(), "one".to_string() ];
    let vec_string_info   = vec_string_info_clone( vec_string );
    println!( "{:?}", vec_string_info );
    //
    let vec_string        = vec![ "zero".to_string(), "one".to_string() ];
    let vec_string_info   = vec_string_info_pop( vec_string );
    println!( "{:?}", vec_string_info );
}

3 posts - 3 participants

Read full topic

🏷️ Rust_feed