我有一个类似于结构的列表(字母是数据):
|A|B|C|D|E|F|G|
我还有另一个类似的列表:
|A|B|E|G|
我想创建一个与第一个列表长度相同但在第二个列表中不存在的列中放置“NULL”的第三个列表,例如:
|A|B|NULL|NULL|E|NULL|G|
我怎样才能做到这一点?
我有一个类似于结构的列表(字母是数据):
|A|B|C|D|E|F|G|
我还有另一个类似的列表:
|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);
}
}
迭代您的第一个列表,对于每个元素,将其与第二个列表中的相应元素进行比较,如果有匹配输出,否则输出空值,继续直到到达第一个列表的末尾。