代码之家  ›  专栏  ›  技术社区  ›  HendPro12

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

  •  1
  • HendPro12  · 技术社区  · 13 年前

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

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

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

    |A|B|E|G|
    

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

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

    我如何才能做到这一点?

    3 回复  |  直到 13 年前
        1
  •  1
  •   Dzyann    13 年前

    你可以这样做:

    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
  •  1
  •   Eric J.    13 年前

    您可以使用Linq:

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

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

        3
  •  0
  •   Skeen    13 年前

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

    推荐文章