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

本文关键字:列表 三个 创建 用于 2个 | 更新日期: 2023-09-27 18:04:53

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

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

我还有一个类似的列表:

|A|B|E|G|

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

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

我怎样才能做到这一点?

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

你可以这样做:

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);
    }
 }

你可以使用Linq:

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

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

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