我必须在结构上类似一个列表(字母将数据):2列出了创建第三个列表
|A|B|C|D|E|F|G|
我也有类似的另一个列表:
|A|B|E|G|
我想创建一个第三列表是相同的长度第一,但在没有在第二列表中存在的列则以“空”,如:
|A|B|NULL|NULL|E|NULL|G|
我该如何做到这一点?
我必须在结构上类似一个列表(字母将数据):2列出了创建第三个列表
|A|B|C|D|E|F|G|
我也有类似的另一个列表:
|A|B|E|G|
我想创建一个第三列表是相同的长度第一,但在没有在第二列表中存在的列则以“空”,如:
|A|B|NULL|NULL|E|NULL|G|
我该如何做到这一点?
你可以做线沿线的东西:
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);
}
}
迭代你的第一个列表,对于每个元素,将它与第二个列表中的相应元素进行比较,如果它们是匹配输出,否则输出null,继续前进直到到达第一个列表的末尾。
你可以使用Linq:
var result =
firstList.Select(p => secondList.Contains(p) ? p : null).ToList();
如果名单是大,但事实上,这是O(N^2)可能无所谓。如果可以将secondList表示为HashSet,则可以提高性能,因为HashSet的集成成员查找为O(1)。
我在做某件事情没有?所以不得不合并2个列表。这很棒。 – 2013-03-21 01:03:54
这假设列将以相同的顺序出现(如果它们存在)。这可能是也可能不是OP的情况(对于我来说不清楚)。 – 2013-03-21 02:11:23
我知道,但他的例子似乎表明这一点。虽然我真的很喜欢你的答案,但它使用包含。所以我想我的答案也会给出一些价值:P – Dzyann 2013-03-21 02:15:06
我的实际问题比我上面的例子复杂得多。你的解决方案让我找到答案。谢谢! – HendPro12 2013-03-23 01:17:03