我有两个列表
List<string> Name = new List<string>();
List<string> Address = new List<string>();
两个列表都有30个数据。我想合并两个列表以获得完整的信息列表,如
List<string, string> CompleteInformation = new List<string, string>();
此外,如果我想将两个以上的列表合并到一个列表中。
答案 0 :(得分:9)
您正在寻找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();
答案 1 :(得分:6)
您可以使用Tuple
存储信息,使用Zip
方法从两个列表中获取信息,例如
List<Tuple<string, string>> bothLists = Name.Zip(Address, (n, a) => new Tuple<string, string>(n, a)).ToList();
但我认为最好的方法是创建一个与您的域相关的类:
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
}
然后
List<Person> bothLists = Name.Zip(Address, (n, a) => new Person{Address = a, Name = n}).ToList();
但是,如果你有多个列表,你需要嵌套多个Zips,这并不漂亮。如果你确定所有列表都有相同数量的元素,只需迭代它们。
在LINQ中:
List<Person> multipleLists = Name.Select((t, i) => new Person
{
Name = t, Address = Address[i], ZipCode = ZipCode[i]
}).ToList();
没有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]
});
}
如果您想远离课程,也可以使用Tuple<string, string, string, [...]>
。
答案 2 :(得分:1)
还有一种类似这样的字典方法:
var people = Name.Zip(Address, (n, a) => new { n, a })
.ToDictionary(x => x.n, x => x.a);
然后,您可以访问键和值。易于搜索信息。