根据订单合并两个或更多列表

Pra*_*nab 4 c#

我有两个列表

List<string> Name = new List<string>();
List<string> Address = new List<string>();
Run Code Online (Sandbox Code Playgroud)

两个列表都有30个数据.我想合并两个列表以获得完整的信息列表

List<string, string> CompleteInformation = new List<string, string>();
Run Code Online (Sandbox Code Playgroud)

此外,如果我想合并两个以上的列表,如何做到这一点.

Mar*_*zek 9

你正在寻找Zip方法:

var CompleteInformation = Name.Zip(Address, (n, a) => new { Address = a, Name = n }).ToList();
Run Code Online (Sandbox Code Playgroud)

为您提供匿名类型实例列表,包含两个属性:Addressi Name.

更新

您可以拨打Zip一次以上电话:

var CompleteInformation
    = Name.Zip(Address, (n, a) => new { Address = a, Name = n })
          .Zip(AnotherList, (x, s) => new { x.Address, x.Name, Another = s })
          .ToList();
Run Code Online (Sandbox Code Playgroud)


Pie*_*ult 6

您可以使用a Tuple来存储信息,以及Zip从两个列表中获取信息的方法,如下所示

List<Tuple<string, string>> bothLists = Name.Zip(Address, (n, a) => new Tuple<string, string>(n, a)).ToList();
Run Code Online (Sandbox Code Playgroud)

但我认为最好的方法是创建一个与您的域相关的类:

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后

List<Person> bothLists = Name.Zip(Address, (n, a) => new Person{Address = a, Name = n}).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,如果你有多个列表,你需要嵌套多个Zips,这并不漂亮.如果您确定所有列表具有相同数量的元素,则只需迭代它们.

在LINQ中:

List<Person> multipleLists = Name.Select((t, i) => new Person
    {
        Name = t, Address = Address[i], ZipCode = ZipCode[i]
    }).ToList();
Run Code Online (Sandbox Code Playgroud)

没有LINQ(严重来说,for循环没有错)

List<Person> multipleLists = new List<Person>();
for (int i = 0; i < Name.Count; i++)
{
    multipleLists.Add(new Person
        {
            Name = Name[i],
            Address = Address[i],
            ZipCode = ZipCode[i]
        });
}
Run Code Online (Sandbox Code Playgroud)

Tuple<string, string, string, [...]>如果您想远离课程,也可以使用a .