拿这两个清单:
红 绿色 蓝色
布朗 红色 蓝色 紫色 橙
我正在寻找一种方法将这些列表组合在一起产生:
布朗 红色 绿色 蓝色 紫色 橙
我认为基本规则是:
1)在列表顶部插入落在第一个公共行之前的任何行(例如,Brown位于第一个公共行之前,红色);
2)如果两个列表都有两个项目,则在行之间插入项目(例如,列表1在红色和蓝色之间插入绿色);和
3)如果在2中找不到“between-ness”,则在底部插入行(例如,List 2在底部插入Orange)。
列表存储在DataTable中。我猜我在迭代时必须在它们之间切换,但是我很难找到一种组合行的方法。
感谢您的帮助。
- 布伦特
答案 0 :(得分:1)
我认为沿着这些方向应该为你做的事情:
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>();
它假定在任一列表中都没有重复项,并且该函数作为largelist传递给较大的列表。
答案 1 :(得分:0)
如果您想加入两个标准列表并且不关心排序,可以使用以下内容:
var list1 = new[] { "Red", "Green", "Blue" };
var list2 = new[] { "Brown", "Red", "Blue", "Purple", "Orange" };
var result = new List<string>( list2 );
result.AddRange( list1.Except( list2 ) );
尝试维持一些特殊的订单将很困难。例如,假设list2不包含Red,第一项应该是什么:Brown或Red?假设list1最后有黄色,而list2有黄色第二。订单应该是什么?
如果您尝试合并两个DataTable,DataTable上有一个Merge方法,可以将一个DataTable合并到另一个DataTable中。