2013-03-21 61 views
1

我必須在結構上類似一個列表(字母將數據):2列出了創建第三個列表

|A|B|C|D|E|F|G| 

我也有類似的另一個列表:

|A|B|E|G| 

我想創建一個第三列表是相同的長度第一,但在沒有在第二列表中存在的列則以「空」,如:

|A|B|NULL|NULL|E|NULL|G| 

我該如何做到這一點?

回答

1

你可以做線沿線的東西:

var list1 = new List<string>() {"A", "B", "C", "D", "E", "F", "G"}; 
var list2 = new List<string>() { "A", "B", "E","G" }; 
var list3 = new List<string>(); 
int j = 0; 
for(int i=0; i < list1.Count; i++) 
{ 
    var item = list1[i]; 
    if (item == list2[j]) 
    { 
    list3.Add(item); 
    j++; 
    } 
    else 
    { 
     list3.Add(null); 
    } 
} 
+0

這假設列將以相同的順序出現(如果它們存在)。這可能是也可能不是OP的情況(對於我來說不清楚)。 – 2013-03-21 02:11:23

+0

我知道,但他的例子似乎表明這一點。雖然我真的很喜歡你的答案,但它使用包含。所以我想我的答案也會給出一些價值:P – Dzyann 2013-03-21 02:15:06

+0

我的實際問題比我上面的例子複雜得多。你的解決方案讓我找到答案。謝謝! – HendPro12 2013-03-23 01:17:03

0

迭代你的第一個列表,對於每個元素,將它與第二個列表中的相應元素進行比較,如果它們是匹配輸出,否則輸出null,繼續前進直到到達第一個列表的末尾。

1

你可以使用Linq:

var result = 
    firstList.Select(p => secondList.Contains(p) ? p : null).ToList(); 

如果名單是大,但事實上,這是O(N^2)可能無所謂。如果可以將secondList表示爲HashSet,則可以提高性能,因爲HashSet的集成成員查找爲O(1)。

+0

我在做某件事情沒有?所以不得不合並2個列表。這很棒。 – 2013-03-21 01:03:54