如果关联标识存在于之前数据的行标识,则为一组。
数据分组后应该为:
分组代码
Dictionary<string, List<string>> dictCutCount = new Dictionary<string, List<string>>();
//存放行标识以及最后一次的关联标识
Dictionary<string, string> dictAssign = new Dictionary<string, string>();
for (int i = 0; i < list.Count; i++)
{
string mark = list[i].F_DM_IntMark;
string connect = list[i].F_DM_IntConnect;
string cutCount = list[i].F_DM_CutCount;
if (dictAssign.ContainsValue(connect)) //dictAssign的value存在当前connect,找到对应组并添加数据
{
foreach (string key in dictAssign.Keys)
{
if (dictAssign[key] == connect)
{
dictCutCount[key].Add(cutCount);
dictAssign[key] = mark;
break;
}
}
}
else
{
dictCutCount.Add(mark, new List<string>() { cutCount });
dictAssign.Add(mark, mark);
}
}
构建测试数据(不重要):
struct Tests
{
public string F_DM_IntMark;
public string F_DM_IntConnect;
public string F_DM_CutCount;
public void setValues(string a, string b, string c)
{
F_DM_IntMark = a;
F_DM_IntConnect = b;
F_DM_CutCount = c;
}
};
Tests test1 = new Tests();
Tests test2 = new Tests();
Tests test3 = new Tests();
Tests test4 = new Tests();
Tests test5 = new Tests();
Tests test6 = new Tests();
test1.setValues("a", "aabbccdd", "1");
test2.setValues("aa", "ab", "1");
test3.setValues("b", "a", "2");
test4.setValues("c", "b", "3");
test5.setValues("ab", "aa", "2");
test6.setValues("d", "c", "4");
List<Tests> list = new List<Tests>() { test1, test2, test3, test4, test5,
test6 };