采取以下两个列表:

清单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>();


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

07-24 12:42