代码之家  ›  专栏  ›  技术社区  ›  ctrl-alt-delor

将数组传递给函数并调用映射

  •  1
  • ctrl-alt-delor  · 技术社区  · 4 年前

    我有一个函数,希望将一个数组映射到另一个数组。

    以下是一些显示问题的简化代码。(映射什么都不做;除了演示错误之外,这个函数毫无用处。)当我取消对赋值的注释时,它运行得很好。但是,当我尝试从函数外部传入数组时,它不会。

    fn main(){
        let args = ["a1", "b1"];
        f( &args );
    }
    
    fn f ( args: &[&str] )  {
        //let args = ["a2", "b2"];
    
        println!("{args:?}");
    
        let args = args.map(
            |v| v
        );
    
        println!("{args:?}")
    }
    

    错误的原因可能是一个切片被传递。这是有道理的,因为我需要能够处理不同长度的数组。而且,slice似乎并没有映射函数。然而,我不知道如何修复它,也不知道我的评估是否正确。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Minn    4 年前

    可以使用const泛型 fn f<const N: usize>(args: &[&str; N]) { ... } 。通过这种方式,您可以传递具有定义长度的数组,并使用map函数。

    或者,您可以使用迭代器:

    let args: Vec<&str> = args.iter().map(
        |v| *v
    ).collect();
    
    推荐文章