C#比较两个列表

luc*_*uke 2 c# excel list

背景:我有两个包含字符串的列表.列出a和列表b.目前,我将excel电子表格中的List a的值写入A列,将List b的值写入Column.列表b应与列表a具有相同的数据并按顺序排列.这并非总是如此.

问题:当我在excel中写入List b的值时,我想在单元格中写入值,如果它在同一点的列表a中,如果不是,我想在单元格中写入一个空字符串.

编辑:感谢回复和答案工作得很好,只是意识到我真正需要的是:

如果两个列表是:

a = {"a", "b", "c", "d", "e" }
b = {"a", "d", "e" }
Run Code Online (Sandbox Code Playgroud)

操作的结果应该是:

{ "a", "", "", "d", "e" }
Run Code Online (Sandbox Code Playgroud)

slo*_*oth 5

一种方法是将zip列表放在一起,并用空字符串替换列表b中的"错误"值:

var a = new [] {"a",   "b", "c",   "d"};
var b = new [] {"a", "Foo", "c", "Bar"};

var fixed_b = a.Zip(b, (x, y) => x == y ? x : "");
Run Code Online (Sandbox Code Playgroud)

fixed_b现在产生了"a","","c""".

将数据写入excel电子表格时,只需迭代fixed_b而不是b

编辑:

根据你的意见:

你可以像这样创建一个小帮助方法:

IEnumerable<T> FillBlanks<T>(IEnumerable<T> source, IEnumerable<T> collection, T blank)
{
    using(var e = collection.GetEnumerator())
    {
        bool more = e.MoveNext();
        foreach(var x in source)
            if(more && x.Equals((T)e.Current))
            {
                yield return x;
                more = e.MoveNext();
            }
            else
                yield return blank;
    }
}

var fixed_b = FillBlanks(a, b, String.Empty);
Run Code Online (Sandbox Code Playgroud)