首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过与元组中的特定索引进行比较,在元组向量中找到元素?

如何通过与元组中的特定索引进行比较,在元组向量中找到元素?
EN

Stack Overflow用户
提问于 2022-09-04 18:24:16
回答 1查看 74关注 0票数 0

我定义了以下散列映射:

代码语言:javascript
复制
let mut adj_list: HashMap<String, Vec<String>>;
let mut adj_matrix: HashMap<String, Vec<(String, bool)>> = HashMap::new();

我还有一个循环:

代码语言:javascript
复制
for (src, _neighbors) in self.adj_list.iter() {
    for (dest, _n) in self.adj_list.iter(){
        let d: &mut (String, bool) = adj_matrix.get_mut(src)
            .into_iter()
            .find(|&x| x == dest) // Error here
            .unwrap();
        // Do something with the tuple d
    }
}

我得到的错误是:

代码语言:javascript
复制
adj_matrix.get_mut(src).into_iter().find(|&x| x == dest);
                                                ^^ no implementation for `Vec<(String, bool)> == String`

这对我来说是有意义的,直接将字符串与元组进行比较是没有意义的。但是,我很难弄清楚如何将dest字符串与元组的第一个元素进行比较。

我试过:

代码语言:javascript
复制
adj_matrix.get_mut(src).into_iter().find(|&x| x.1 == dest);

但这给了我一个错误:

代码语言:javascript
复制
adj_matrix.get_mut(src).into_iter().find(|&x| x.1 == dest);
                                                ^ unknown field

处理这件事的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-04 19:08:57

您的adj_matrix变量是向量的HashMap。

你得到的错误给了你一个提示:

^^ Vec<(String, bool)> == String不实现

您不是将元组与字符串进行比较,而是将元组的Vec与字符串进行比较,这也是没有意义的。

为什么你在这里有一个Vec,而它看起来你应该有一个元组?

让我们看看这里的类型:

代码语言:javascript
复制
let d: &mut (String, bool) = adj_matrix.get_mut(src) // --> Option<&mut Vec<(String, bool)>>
        .into_iter() // --> impl Iterator<Item = &mut Vec<(String, bool)>>
        .find(|&x| x == dest) // x -> Vec<(String, bool)>
        .unwrap();

这是因为Option确实实现了IntoIter,并返回返回0或1元素的迭代器,这取决于它是Some()还是None。

要解决您的问题,首先需要确保您确实有一个src键的条目。

它看起来像这样:

代码语言:javascript
复制
for (src, _neighbors) in self.adj_list.iter() {
    for (dest, _n) in self.adj_list.iter(){
        if let Some(v) = adj_matrix.get_mut(src) {
            let d: &mut (String, bool) = v
                .into_iter()
                .find(|&x| x == dest)
                .unwrap();
            // Do something with the tuple d
        } else {
            // src was not found
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73601832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档