C# 使用LINQ将多个集合合并为一个集合

C# 使用LINQ将多个集合合并为一个集合,c#,.net,list,linq,merge,C#,.net,List,Linq,Merge,是否可以使用LINQ将两个或多个相同类型和大小的集合折叠/合并为相同类型和大小的新集合 var list01 = new List<string> { "A", "", "", "B", "", "", "" }; var list02 = new List<string> { "", "C", "", "", "", "D", "" }; var list03 = new List<string> { "", "", "", "", "E"

是否可以使用LINQ将两个或多个相同类型和大小的集合折叠/合并为相同类型和大小的新集合

var list01 = new List<string> { "A",  "", "", "B",  "",  "", "" };
var list02 = new List<string> {  "", "C", "",  "",  "", "D", "" };
var list03 = new List<string> {  "",  "", "",  "", "E",  "", "" };

           The desired result:  "A", "C", "", "B", "E", "D", "";
var list01=新列表{“A”、“”、“”、B”、“”、“”、“”、“”};
var list02=新列表{“,”C“,”D“,”};
var list03=新列表{“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”};
期望的结果是:“A”、“C”、“B”、“E”、“D”、“D”;

如果一个集合在某个位置保存数据,则其他集合都不会在同一位置保存数据,例如,list02和list03中的第一个位置将始终为空,因为list01在第一个位置保存数据。

您可能希望使用
Zip
两次:

var result = list01
                .Zip(list02, (a, b) => !string.IsNullOrEmpty(a) ? a : b)
                .Zip(list03, (a, b) => !string.IsNullOrEmpty(a) ? a : b);
Console.WriteLine(string.Join(",", result));

或者另一种解决方案,只需将项目添加到
Zip
中即可:

var list = list01.Zip(list02, (a,b) => a + b)
                 .Zip(list03, (a,b) => a + b);

string
添加到
null
或空
string
将得到相同的结果。

正如其他建议一样,可以使用LINQ的一些内置函数来实现

以下解决方案没有任何内置函数

static List<string> megreLists(List<string> lst1, List<string> lst2)
{
    List<string> result = new List<string>();

    if (lst1.Count == lst2.Count)
    {
        for (int i = 0; i < lst1.Count; i++)
        {
            if (string.IsNullOrWhitespace(lst1[i]) && lst1[i].Trim() == lst2[i].Trim())
            {
                result.Add(lst1[i]);
            }
            else if (string.IsNullOrWhitespace(lst1[i]) && lst1[i].Trim() != lst2[i].Trim())
            {
                result.Add(lst1[i]);
            }
            else if (string.IsNullOrWhitespace(lst2[i]) && lst1[i].Trim() != lst2[i].Trim())
            {
                result.Add(lst2[i]);
            }
        }
    }

    return result;
}



var result = megreLists(megreLists(list01, list02), list03);
静态列表磁继电器(列表lst1、列表lst2)
{
列表结果=新列表();
if(lst1.Count==lst2.Count)
{
对于(int i=0;i
如果OP关于在该位置上始终有一个项目的断言被证明是错误的,那么可能的重复可能会产生奇怪的结果。也就是说,如果发生这种情况,我的可能也会产生意想不到的结果。:-)@John Yeap:-)。您可以将
lst1[i].Trim()==string.Empty
替换为
string.IsNullOrWhitespace(lst1[i])
:)@John谢谢您的建议!实施!