C# 2个不同长度的列表用于创建第三个列表

C# 2个不同长度的列表用于创建第三个列表,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个结构类似的列表(字母将是数据): 我还有另一个类似的列表: |A|B|E|G| 我想创建与第一个列表长度相同的第三个列表,但在第二个列表中不存在的列中放置“NULL”,例如: |A|B|NULL|NULL|E|NULL|G| 如何实现这一点?迭代第一个列表,将每个元素与第二个列表中的对应元素进行比较,如果有匹配的输出,否则输出空值,则继续运行,直到到达第一个列表的末尾。您可以使用Linq: var result = firstList.Select(p => seco

我有一个结构类似的列表(字母将是数据):

我还有另一个类似的列表:

|A|B|E|G|
我想创建与第一个列表长度相同的第三个列表,但在第二个列表中不存在的列中放置“NULL”,例如:

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

如何实现这一点?

迭代第一个列表,将每个元素与第二个列表中的对应元素进行比较,如果有匹配的输出,否则输出空值,则继续运行,直到到达第一个列表的末尾。

您可以使用Linq:

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

如果列表很大,这是O(N^2)这一事实可能很重要。如果可以将secondList表示为HashSet,则可以提高性能,因为HashSet的集合成员查找是O(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);
    }
 }
var list1=newlist(){“A”、“B”、“C”、“D”、“E”、“F”、“G”};
var list2=新列表(){“A”、“B”、“E”、“G”};
var list3=新列表();
int j=0;
for(int i=0;i
我正在做一件没有密码的事情?因此必须合并两个列表。这很好。这假设列将以相同的顺序出现,如果它们存在的话。我知道,但他的例子似乎表明了这一点。虽然我很喜欢你的答案,但它使用了contains。所以我认为我的回答也会有一些价值:PMy的实际问题比我上面的例子要复杂得多。你的解决办法使我找到了答案。谢谢
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);
    }
 }