如何“交错”两个DataTables

时间:2010-06-10 02:23:17

标签: c# merge datatable

拿这两个清单:

清单1

红 绿色 蓝色

清单2

布朗 红色 蓝色 紫色 橙

我正在寻找一种方法将这些列表组合在一起产生:

清单3

布朗 红色 绿色 蓝色 紫色 橙

我认为基本规则是:

1)在列表顶部插入落在第一个公共行之前的任何行(例如,Brown位于第一个公共行之前,红色);

2)如果两个列表都有两个项目,则在行之间插入项目(例如,列表1在红色和蓝色之间插入绿色);和

3)如果在2中找不到“between-ness”,则在底部插入行(例如,List 2在底部插入Orange)。

列表存储在DataTable中。我猜我在迭代时必须在它们之间切换,但是我很难找到一种组合行的方法。

感谢您的帮助。

- 布伦特

2 个答案:

答案 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中。

DataTable.Merge