我有两个表,每个表存储在一个List中。 该表有两列(因此列表中的数组大小为2)
List<int[]> tablea;
List<int[]> tableb;
tablea的内容
a b
{1,2}
{3,4}
{5,6}
tableb的内容
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? (我在这里关心的是速度而不是空间)
答案 0 :(得分:0)
可以处理非唯一键值的颂歌如下:
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] });
}
}
}