采取以下两个列表:
清单1
红色
绿色
蓝色
清单2
棕色
红色
蓝色
紫色
橙子
我正在寻找一种将这些列表组合在一起以产生的方法:
清单3
棕色
红色
绿色
蓝色
紫色
橙子
我认为基本规则是:
1)在列表的顶部插入在第一公共行之前的任何行(例如,棕色在第一公共行之前,红色);
2)如果两个列表都有两个项目,则在行之间插入项目(例如,列表1在红色和蓝色之间插入绿色);和
3)如果在2中没有发现“中间”,则在底部插入行(例如,列表2在底部插入橙色)。
列表存储在DataTable中。我猜想我必须在迭代时在它们之间切换,但是我很难弄清楚组合行的方法。
谢谢你的帮助。
-布伦特
最佳答案
我认为可以按照以下方式为您做一些事情:
Dictionary<string, float> clrs = new Dictionary<string, float>();
float i = 0;
foreach (string s in largeList)
clrs.Add(s, i++);
float lastIndex = 0;
for (int j = 0; j < smallList.Count; j++)
{
if (largeList.Contains(smallList[j]))
lastIndex = clrs[smallList[j]];
else
clrs.Add(smallList[j], lastIndex + 0.5f);
}
var sorted = from c in clrs.Keys orderby clrs[c] select c;
return sorted.ToList<string>();
它假定在两个列表中都没有重复项,并且该函数作为大列表传递给较大的列表。