哈希连接算法

本文关键字:算法 连接 哈希 | 更新日期: 2023-09-27 17:59:42

我有两个表,每个表都存储在List中。该表有两列(因此列表中的数组大小为2)

List<int[]> tablea;
List<int[]> tableb;

表格的内容

 a b 
{1,2}
{3,4}
{5,6}

表b内容

 b c
{2,3}
{2,4}
{6,7}

现在我希望通过字段b连接两个表,因此结果是

 a b c
{1,2,3}
{1,2,4}
{5,6,7}

我知道我可以做的是排序合并连接算法,而且算法非常直观。但我听说了混合hashjoin(这里提到http://en.wikipedia.org/wiki/Hash_join#_note-1) 速度更快。

我可以知道如何使用混合hashjoin算法在C#(优选)或java中连接tablea和tableb吗?(这里我关心的是速度而不是空间)

哈希连接算法

可以处理非唯一键值的ode如下所示:

Dictionary<int, List<int[]>> hashA = new Dictionary<int, List<int[]>>();
    foreach (int[] a in tablea) {
       List<int> list;
       if (!hashA.TryGetValue(a[1], out list) {
          list = new List<int>();
          hashA.Add(a[1], list);
       }
       list.Add(a);
    }
    List<int[]> result = new List<int[]>();
    foreach (int[] b in tableb) {
       List<int[]> a;
       if (hashA.TryGetValue(b[0], out a) {
          foreach (int[] line in a) {
             result.Add(new int[] { line[0], line[1], b[1] });
          }
       }
    }