【问题标题】:Find "not the same" elements in two arrays在两个数组中查找“不相同”的元素
【发布时间】:2010-06-01 17:07:53
【问题描述】:

我有两个整数列表 (List<int>)。它们包含相同的元素,但 List 1 包含不在 List 2 中的元素。

如何查找列表 1 的哪些元素不在列表 2 中。

谢谢:)

PS。 lang是c#

【问题讨论】:

    标签: c# arrays list


    【解决方案1】:

    你可以使用IEnumerable.Except:

    list1.Except(list2);
    

    【讨论】:

    • 不能这样做,因为 except 的参数必须是 IEnumerable。列表作为参数是不可接受的。
    • @trnTash:List 实现了 IEnumerable。代码是正确的。
    【解决方案2】:
    new HashSet<int>(l1).ExceptWith(l2);
    

    【讨论】:

      【解决方案3】:

      一个非常简单的解决方案:

      HashSet<int> theSet1 = new HashSet<int>(List1);
      theSet1.ExceptWith(List2);
      

      【讨论】:

      • HashSet 毕竟帮了大忙。谢谢!
      • 没有。致删除他帖子的人。
      【解决方案4】:

      为简单起见,您可以使用 Contains 方法并检查一个列表是否不包含另一个列表的元素:

      for (int i = 0; i < list2.Count; ++i)
      {
          if (!list1.Contains(list2[i]) //current element is not in list 1
              //some code
      }
      

      【讨论】:

      • 这是倒数,一个 O(N^2) 算法。
      • 这也可以,但其他解决方案更快,代码更少
      【解决方案5】:

      如果您的解决方案是第一个列表包含第二个并且您只搜索在第一个列表之后添加的记录, 也许这会很有用

      public static int DokleSuIsti(IList<string> prevzemNow, IList<string> prevzemOld)
              {
                  int dobroja = 0;
                  int kolikohinaje;
                  if (prevzemOld.Count() < prevzemNow.Count())
                  {
                      kolikohinaje = prevzemOld.Count();
                  }
                  else
                  {
                      kolikohinaje = prevzemNow.Count();
                  }
      
      
      
                  for (int i = 0; i < kolikohinaje; i++)
                  {
                      if (!Object.Equals(prevzemNow[i], prevzemOld[i]))
                      {
                          dobroja = i;
                          return dobroja;
                      }
                      dobroja = i;
                  }
                  return dobroja;
              }
      

      之后,您可以使用该 int 作为通过您的 Ilist 的起点

      【讨论】:

        【解决方案6】:

        如果它们没有排序或其他什么,你将很难过。

        O(N^2) 算法(一个简单、愚蠢的循环)或其他数据结构,告诉我你更喜欢哪种。

        或者,您当然可以通过排序来更改源数据,我认为这不是一种选择。

        【讨论】:

        • 不可能在 O(N log N) 中对它们进行排序?
        • 你可以对两个列表进行基数排序 O(kN) 并计算差异 O(N)。
        猜你喜欢
        • 2020-03-26
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 2020-01-17
        相关资源
        最近更新 更多