string - 无法将HashSet <&str>强制转换为HashSet <&String>

标签 string types rust

在弄乱一些示例代码时,我发现我无法将HastSet<&String>强制转换为HashSet<&str>,反之亦然。

use std::collections::HashSet;

fn main() {
    // move strings into HashSet
    let known_values: HashSet<&str> = ["a", "b", "c"]
        .iter().cloned().collect();

    // provided an Vec<String>
    let provided_values: Vec<String> = vec![
        "a".to_string(),
        "b".to_string(),
        "z".to_string()
    ];

    // hash set of refrences
    let mut found: HashSet<&String> = HashSet::new();
    found.insert(&provided_values[0]);
    found.insert(&provided_values[1]);
    found.insert(&provided_values[2]);

    //let missing = known_values.difference(&found);
    let missing = found.difference(&known_values);

    println!("missing: {:#?}", missing);
}


(Playground)

编译器错误
error[E0308]: mismatched types
  --> src/main.rs:23:36
   |
23 |     let missing = found.difference(&known_values);
   |                                    ^^^^^^^^^^^^^ expected struct `std::string::String`, found `str`
   |
   = note: expected reference `&std::collections::HashSet<&std::string::String>`
              found reference `&std::collections::HashSet<&str>`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.

我知道您可以将&String强制转换为&str,反之亦然,因此令我有些惊讶的是它没有扩展到HashSet<&String>HashSet<&str>。有什么方法可以解决这个问题而不仅仅是分配String

最佳答案

无需使用其他类型的HashSet。将found更改为HashSet<&str>即可运行该程序。

// hash set of references
let mut found: HashSet<&str> = HashSet::new();
found.insert(&provided_values[0]);
found.insert(&provided_values[1]);
found.insert(&provided_values[2]);

(Playground)

关于string - 无法将HashSet <&str>强制转换为HashSet <&String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60698946/

相关文章:

visual-studio-code - 使用 VS Code 时如何解决 Rust 中的 "unresolved import"?

rust - 闭包何时在没有移动关键字的情况下获得其环境的所有权?

javascript - 人力车 JavaScript 库 : strings for x-axis

c++ - std::out_of_range 错误?

c - 在 C 中读取和转换枚举类型

types - F# 中的加法类型 (+)

pointers - 编译时通用类型大小检查

c++ - 反向字符串没有循环

c - 使用指针和字符串——一个字符如何变成一个整数?

java - 如何将这种鸭子类型(duck typing)(Python)转换为 Java 泛型?