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

时间:2013-03-21 00:53:12

标签: c# asp.net-mvc asp.net-mvc-4

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

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

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

|A|B|E|G|

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

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

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

你可以使用Linq:

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

如果列表很大,那么这是O(N ^ 2)的事实可能很重要。如果您可以将secondList表示为HashSet,则可以提高性能,因为HashSet的集合成员资格查找是O(1)。

答案 1 :(得分: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);
    }
 }

答案 2 :(得分:0)

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