Ovy*_*ate 5 .net c# dictionary list
假设我有两个查询结果存储在两个不同的.csv文件(1.csv,2.csv)中,数据如下所示:
dim1和dim2将出现在每个查询表结果中,这些字段可以不同。
我如何获得如下所示的结果?
这些字段在结果表中是唯一连接的,并且行通过键(dim1和dim2)分组。
我用a List<List<string>>来代表每个表的结果:
public static List<List<string>> R1 { get; } = new List<List<string>>
{
new List<string> {"dim1", "dim2", "field1"},
new List<string> {"2", "wwa", "3"},
new List<string> {"1", "arr", "6"}
};
public static List<List<string>> R2 { get; } = new List<List<string>>
{
new List<string> {"dim1", "dim2", "field2", "field3"},
new List<string> {"2", "jaja", "1000", "2"},
new List<string> {"3", "wwa", "1000", "3"},
new List<string> {"1", "arr", "2000", "4"}
};
Run Code Online (Sandbox Code Playgroud)
我采用了以下策略:
var keys = 2;
var results = new List<List<string>>();
foreach (var r1 in R1)
{
var range = r1.GetRange(0, keys);
var hash = range.GetKey();
var found = false;
var row = new List<string>();
foreach (var r2 in R2)
{
if (r2.GetRange(0, keys).GetKey() == hash)
{
row.AddRange(range);
row.AddRange(r1.GetRange(keys, r1.Count - keys));
row.AddRange(r2.GetRange(keys, r2.Count - keys));
results.Add(row);
found = true;
}
}
if (!found)
{
row.AddRange(r1);
R2[0].GetRange(keys, R2[0].Count - keys).ForEach(e => row.Add(null));
results.Add(row);
}
}
foreach (var r2 in R2)
{
var range = r2.GetRange(0, keys);
var hash = range.GetKey();
var found = false;
var row = new List<string>();
foreach (var r in results)
{
if (r.GetRange(0, keys).GetKey() == hash)
found = true;
}
if (!found)
{
row.AddRange(range);
R1[0].GetRange(keys, R1[0].Count - keys).ForEach(e => row.Add(null));
row.AddRange(r2.GetRange(keys, r2.Count - keys));
results.Add(row);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我具有2xN ^ 2的复杂度,我认为应该有一个更好的方法来生成List<List<string>>适合上面示例的新方法。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |