从两个列表中产生一个列表

我有两个包含string的列表。 列出a和列表b。 目前,我将Excel电子表格中List a的值写入A列,将List b的值写入Column中。 列表b应该与列表a具有相同的数据并按顺序排列。 这并非总是如此。 当我在Excel中写入列表b的值,我想要写入单元格中的值,如果它在列表中的a在同一点,如果不是我想要写入一个空string单元格。

我有两个列表a = {"a","b","c", "d", "e", "c", "f" }b = {"a", "d", "e" ,"c"} 。 我需要产生第三个列表c,比如从两个c = { "a", "", "", "d", "e" ,"c", ""}

尝试:

 var c = a.Zip(b, (x, y) => x.Equals(y, StringComparison.CurrentCultureIgnoreCase) ? x : ""); 

但那只会让我c = {"a"}

您可以使用以下方法:

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

例:

 var a = new [] {"a", "b", "c", "d", "e", "c", "f" }; var b = new [] {"a", "d", "e" ,"c"}; var c = FillBlanks(a, b, ""); 

c现在是:

在这里输入图像描述

如果指数很重要:

 var c = a.Select((s, i) => b.ElementAtOrDefault(i) == s ? s : "").ToList(); 

除此以外:

 var c = a.Select(s => b.Contains(s) ? s : "").ToList(); 

如果情况不重要:

 var c = a.Select(s => b.Contains(s, StringComparer.CurrentCultureIgnoreCase) ? s : "") .ToList();