哈希连接算法
本文关键字:算法 连接 哈希 | 更新日期: 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] });
}
}
}