2014-02-22 74 views
4

合并两个或多个列表,我有两个词典根据顺序

List<string> Name = new List<string>(); 
List<string> Address = new List<string>(); 

两者都具有30个数据的列表。我想合并这两个列表以获得完整的信息列出像

List<string, string> CompleteInformation = new List<string, string>(); 

另外,如果我想在一个合并两个以上的名单如何是可以做到的。

+1

你的意思是Dictionary ? – HOKBONG

回答

9

您正在寻找Zip方法:

var CompleteInformation = Name.Zip(Address, (n, a) => new { Address = a, Name = n }).ToList(); 

使你匿名类型实例的列表,具有两个属性:AddressName

更新

您可以拨打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(); 
+0

哦,这太不可思议了!无需创建单独的容器。我一直在使用这个。 –

+0

谢谢MarcinJuraszek。但是如果我有两个以上的列表,那我该怎么做。例如,让我们假设我是否还有两个名为 的列表 City = new List (); List State = new List (); 和我想结合这些在相同的completeInformation列表 – Pranab

+2

@Pranab我已经更新了我的答案。 – MarcinJuraszek

1

还有的东西字典的方法是这样的:

var people = Name.Zip(Address, (n, a) => new { n, a }) 
      .ToDictionary(x => x.n, x => x.a); 

然后,您可以访问键和值。轻松搜索信息。

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(); 

但是,如果你有多个列表,你需要嵌套多个拉链,这是不漂亮。如果你是当然所有列表都有相同数量的元素,只是遍历它们。

在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, [...]>如果你想远离班了。

+0

我很抱歉发表评论,但我只是要说 - 你的名字真棒。 –