rust - 将向量切片作为参数传递给函数

标签 rust reference slice

我正在尝试学习 Rust 编程语言(目前主要使用 Python)。 rust 网站提到的任务之一是构建系统,将员工和部门添加到充当“商店”的 HashMap。

在代码中,我试图将其拆分为单独的函数,其中一个函数解析用户输入并检查它是否是列出部门或添加员工的请求。接下来我想要特定的函数来处理这些 Action 。

假设输入的形式是:

Add employee to department

然后我希望初始解析函数检测到操作是“添加”,从我想将其传递给处理添加的函数“添加”。

我已将字符串按空格拆分为字符串向量。是否可以将该向量的一部分 (["employee", "to", "department"]) 传递给函数 add?看来我只能通过完整的引用。

我的代码:

fn main() {
    // this isnt working yet
    let mut user_input = String::new();
    let mut employee_db: HashMap<String,String> = HashMap::new();

    get_input(&mut user_input);
    delegate_input(&user_input[..], &mut employee_db);
    user_input = String::new();
}

fn get_input(input: &mut String) {
    println!("Which action do you want to perform?");
    io::stdin().read_line(input).expect("Failed to read input");
}

fn delegate_input(input: &str, storage: &mut HashMap<String,String>) {
    // Method is responsible for putting other methods into action
    // Expected input:
    // "Add user to department"
    // "List" (list departments)
    // "List department" (list members of department)
    // "Delete user from department"
    // "" show API
    let input_parts: Vec<&str> = input.split(' ').collect();
    if input_parts.len() < 1 && input_parts.len() > 4 {
        panic!("Incorrect number of arguments")
    } else {
        println!("actie: {}", input_parts[0]);
        match input_parts[0].as_ref() {
            "Add" => add(&input_parts),
            "List" => list(&input_parts),
            "Delete" => delete(&input_parts),
            "" => help(),
            _ => println!("Incorrect input given"),
        }
    }
}

fn add(parts: &Vec<&str>) {
    println!("Adding {} to {}", parts[1], parts[3]);
}

最佳答案

你可以传递一个 slice .

将您的添加签名更改为此:

fn add(parts: &[&str]) {

然后你可以调用它:

"Add" => add(&input_parts[1..3]),

关于rust - 将向量切片作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68481028/

相关文章:

arrays - 在 go 中循环 slice/数组的有效方法

javascript - 检测非数字字符的功能不起作用

rust - 在闭包中借用可变引用来对向量进行排序

rust - 使用 .unwrap() 应该被视为不好的做法吗?

rust - 如何使用一系列参数初始化结构

.net - NuGet 将 DLL 文件放在哪里?

c++ - 如何在 C++ 中以正确的方式定义树的插入函数?

rust - 如何将映射函数中的变量绑定(bind)到类型?

html - 如何引用 HTML 页面的特定位置?

python - 在 Python 字符串切片中哪个优先?索引还是步骤?