【问题标题】:Access a vector element with a string使用字符串访问向量元素
【发布时间】:2020-06-14 05:34:59
【问题描述】:

在 rust book 中我们有以下代码


#[test]
    fn one_result() {
        let query = "duct";
        let contents = "\
Rust:
safe, fast, productive.
Pick three.";

        assert_eq!(vec!["safe, fast, productive."], search(query, contents));
    }

搜索的功能是:


pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
    let mut results = Vec::new();

    for line in contents.lines() {
        if line.contains(query) {
            results.push(line);
        }
    }

    results
}

assert_eq如何访问带有字符串的向量元素?我找不到有关此类功能的任何描述

【问题讨论】:

  • 你指的是vec!["safe, fast, productive."]吗?
  • 是的,好像只是创建了一个单元素向量,我第一次看到就完全错了

标签: rust


【解决方案1】:

assert_eq! 不通过字符串访问向量元素。它比较两个向量的相等性 (==)。

assert_eq! 也只是检查相等性的语法糖,否则会恐慌。 换句话说,这与您的断言相同:

if vec!["safe, fast, productive."] != search(query, contents) {
    panic!()
}

继续阅读本书以了解 Traits,尤其是 EqPartialEq trait,它们负责在 rust 中测试相等性。

【讨论】:

    【解决方案2】:

    我想我找到了答案。代码

    assert_eq!(vec!["safe, fast, productive."], search(query, contents));

    使用String 类型的元素创建一个向量,其中只有一个条目包含文本“安全、快速、高效”。然后将此向量与搜索函数返回的向量进行比较。所以它不会尝试用字符串访问向量元素,而是比较每个只包含一个元素的向量

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多