根据订单合并两个或多个列表
我有两个列表
List Name = new List(); List Address = new List();
两个列表都有30个数据。 我想合并两个列表以获得完整的信息列表
List CompleteInformation = new List();
此外,如果我想合并两个以上的列表,如何做到这一点。
您正在寻找Zip
方法:
var CompleteInformation = Name.Zip(Address, (n, a) => new { Address = a, Name = n }).ToList();
为您提供匿名类型实例列表,具有两个属性: Address
i 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();
您可以使用Tuple
存储信息,使用Zip
方法从两个列表中获取信息,如下所示
List> bothLists = Name.Zip(Address, (n, a) => new Tuple(n, a)).ToList();
但我认为最好的方法是创建一个与您的域相关的类:
public class Person { public string Name { get; set; } public string Address { get; set; } }
然后
List bothLists = Name.Zip(Address, (n, a) => new Person{Address = a, Name = n}).ToList();
但是,如果你有多个列表,你需要嵌套多个Zips,这并不漂亮。 如果您确定所有列表都具有相同数量的元素,则只需迭代它们。
在LINQ中:
List multipleLists = Name.Select((t, i) => new Person { Name = t, Address = Address[i], ZipCode = ZipCode[i] }).ToList();
没有LINQ(严重的是,for循环没有错)
List multipleLists = new List (); for (int i = 0; i < Name.Count; i++) { multipleLists.Add(new Person { Name = Name[i], Address = Address[i], ZipCode = ZipCode[i] }); }
如果你想远离课程Tuple
你也可以使用Tuple
。
还有一个类似这样的字典方法:
var people = Name.Zip(Address, (n, a) => new { n, a }) .ToDictionary(x => xn, x => xa);
然后,您可以访问键和值。 易于搜索信息。