小编mil*_*cio的帖子

使用 HashMap 实现类似 SQL 的 RIGHT OUTER JOIN 的迭代器适配器

我正在尝试使用类似 SQL 的连接迭代器来扩展 bluss 的rust-itertools 。我在使用散列连接策略的 RIGHT OUTER JOIN 时遇到了一个特殊问题(该策略本身实际上非常简单)。

迭代器适配器结构体采用 2 个输入迭代器,其中第二个(右侧)被加载到 HashMap 中。迭代的工作原理如下:

  1. 左侧迭代器中的项目与映射进行匹配 - 如果匹配则返回两个项目
  2. 当左迭代器耗尽时,从映射中返回不匹配的值

问题在于第二部分,我尝试将地图的值迭代器与地图一起存储以存储其迭代状态。但正如我在这个答案中了解到的那样,这在铁锈中是不可能的。不幸的是我不知道如何才能做到这一点。

以下是 INNER JOIN 适配器的完整代码,它执行第一部分:

use std::collections::HashMap;
use std::hash::Hash;

pub struct HashJoinInner<I, K, V0, V1> where
    I: Iterator<Item=(K, V0)>,
    K: Hash + Eq,
    V1: Clone,
{
    left: I,
    right: HashMap<K, V1>,
}

impl<I, K, V0, V1> HashJoinInner<I, K, V0, V1> where
    I: Iterator<Item=(K, V0)>,
    K: Hash + Eq,
    V1: Clone,
{
    /// Create a `HashJoinInner` iterator. …
Run Code Online (Sandbox Code Playgroud)

iterator rust

5
推荐指数
1
解决办法
746
查看次数

标签 统计

iterator ×1

rust ×1