C# 如何";交织;两个数据表

C# 如何";交织;两个数据表,c#,merge,datatable,C#,Merge,Datatable,以这两张清单为例: 清单1 红色的 绿色 蓝色的 清单2 棕色的 红色 蓝色 紫色 橙色的 我正在寻找一种将这些列表组合在一起的方法,以生成: 清单3 棕色的 红色 绿色 蓝色 紫色 橙色的 我认为基本规则如下: 1) 在列表顶部插入第一个公共行之前的任何行(例如,棕色位于第一个公共行之前,红色) 2) 如果两个列表都有两个项目,则在行之间插入项目(例如,列表1在红色和蓝色之间插入绿色);及 3) 如果在2中找不到“中间性”,则在底部插入行(例如,列表2在底部插入橙色) 这些列表存储在数据表中。

以这两张清单为例:

清单1 红色的 绿色 蓝色的

清单2 棕色的 红色 蓝色 紫色 橙色的

我正在寻找一种将这些列表组合在一起的方法,以生成:

清单3 棕色的 红色 绿色 蓝色 紫色 橙色的

我认为基本规则如下:

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

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

3) 如果在2中找不到“中间性”,则在底部插入行(例如,列表2在底部插入橙色)

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

谢谢你的帮助


--Brent

如果您想加入两个标准列表,而不关心排序,可以使用以下方法:

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 ) );
var list1=new[]{“红色”、“绿色”、“蓝色”};
var list2=新[]{“棕色”、“红色”、“蓝色”、“紫色”、“橙色”};
var结果=新列表(列表2);
result.AddRange(列表1.Except(列表2));
试图维持一些特殊秩序将是困难的。例如,假设列表2不包含红色,第一项应该是什么:棕色还是红色?假设list1最后一个是黄色的,而list2第二个是黄色的。订单应该是什么

如果您试图合并两个数据表,则在一个数据表上有一个合并方法,可以将一个数据表合并到另一个数据表中


我认为以下几点可以帮助您:

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>();
Dictionary clrs=new Dictionary();
浮点数i=0;
foreach(largeList中的字符串s)
添加(s,i++);
浮动指数=0;
对于(int j=0;j

它假定两个列表中都没有重复项,并且函数作为largelist传递给较大的列表

订单有那么大区别吗?“只到十字路口不是更简单吗?”托马斯,我理解这意味着排序是给出3分的重要部分。否则,正如您所展示的,它相当简单。@SnOrfus-如果排序很重要,那么就有一大堆关于处理边缘案例的问题,我在帖子中提到了这些问题。@Thomas同意,我不相信我的实现会涵盖这些案例。来自OP的信息会很好。(顺便说一句,现在读这篇文章,我可能会觉得听起来像个dbag;我并没有试图这样做)@Thomas:是的,顺序很重要。如果有帮助的话,我将尝试将XBRL财务报表中的行项目按季度进行匹配,然后将结果输出到电子表格中。例如,如果在第1季度,申报人没有(比如)为总收入列出一个“销售”数字,但在第2季度这样做了,我需要足够的智能为收入前的销售添加一行,但在第1季度申报的总收入之前可能出现的任何项目之后添加一行。我认为,处理边缘案例将是一种随机性,只要随机性是“一致的”,客户应该可以接受。