我必須在結構上類似一個列表(字母將數據):2列出了創建第三個列表
|A|B|C|D|E|F|G|
我也有類似的另一個列表:
|A|B|E|G|
我想創建一個第三列表是相同的長度第一,但在沒有在第二列表中存在的列則以「空」,如:
|A|B|NULL|NULL|E|NULL|G|
我該如何做到這一點?
我必須在結構上類似一個列表(字母將數據):2列出了創建第三個列表
|A|B|C|D|E|F|G|
我也有類似的另一個列表:
|A|B|E|G|
我想創建一個第三列表是相同的長度第一,但在沒有在第二列表中存在的列則以「空」,如:
|A|B|NULL|NULL|E|NULL|G|
我該如何做到這一點?
你可以做線沿線的東西:
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);
}
}
迭代你的第一個列表,對於每個元素,將它與第二個列表中的相應元素進行比較,如果它們是匹配輸出,否則輸出null,繼續前進直到到達第一個列表的末尾。
你可以使用Linq:
var result =
firstList.Select(p => secondList.Contains(p) ? p : null).ToList();
如果名單是大,但事實上,這是O(N^2)可能無所謂。如果可以將secondList表示爲HashSet,則可以提高性能,因爲HashSet的集成成員查找爲O(1)。
我在做某件事情沒有?所以不得不合並2個列表。這很棒。 – 2013-03-21 01:03:54
這假設列將以相同的順序出現(如果它們存在)。這可能是也可能不是OP的情況(對於我來說不清楚)。 – 2013-03-21 02:11:23
我知道,但他的例子似乎表明這一點。雖然我真的很喜歡你的答案,但它使用包含。所以我想我的答案也會給出一些價值:P – Dzyann 2013-03-21 02:15:06
我的實際問題比我上面的例子複雜得多。你的解決方案讓我找到答案。謝謝! – HendPro12 2013-03-23 01:17:03