2014-02-22 72 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

我很抱歉發表評論,但我只是要說 - 你的名字真棒。 –