2013-03-21 59 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