Cession d'une list à partir de deux lists

J'ai deux lists qui contiennent des cordes. Liste a et Liste b. En ce moment, j'écris les valeurs de List a dans une feuille de calcul Excel à la colonne A et les valeurs de la list b dans Colonne. La list b devrait avoir les mêmes données que List a et être en séquence. Ce n'est pas toujours le cas. Lorsque j'écris des valeurs de List b dans excel, je veux écrire la valeur dans la cellule si elle est dans la list a au même point, sinon je veux écrire une string vide dans la cellule.

J'ai deux lists a = {"a","b","c", "d", "e", "c", "f" } et b = {"a", "d", "e" ,"c"} . J'ai besoin de céder une troisième list c, comme des deux c = { "a", "", "", "d", "e" ,"c", ""}

A essayé:

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

Mais cela ne me donnerait que c = {"a"}

Vous pouvez utiliser la méthode suivante:

 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; } } 

Exemple:

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

c est maintenant:

entrez la description de l'image ici

Si l'indice est important:

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

autrement:

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

si l'affaire n'a pas d'importance:

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