程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 一道簡單的C#測試題:C#Except

一道簡單的C#測試題:C#Except

編輯:C#入門知識

題目很簡單

例如有2個集合

  List<string> listA = new List<string> { "a", "b", "c", "d", "e" };
            List<string> listB = new List<string> { "a", "b", "f" };

需要找出在listA中存在,在listB中不存在的元素。

實現方式一:

   List<string> b = new List<string>();
            foreach (var item in listA)
            {
                if (!listB.Contains(item))
                    b.Add(item);
            }

實現方式二

    IEnumerable<string> result = listA.Except<string>(listA.Intersect<string>(listB));

方式二的實現是借用了HashSet等價與

   ISet<string> setA = new HashSet<string>(listA);
            ISet<string> setB = new HashSet<string>(listB);
            setA.ExceptWith(setB);

實現方式三:如果listA,listB 都是有序,可以用更簡單的方式來處理

[csharp]
static List<T> ExceptWith<T>(List<T> from, List<T> except) where T : IComparable 
      { 
          List<T> resut = new List<T>(); 
          int fromindex, exceptindex, copyindex; 
          fromindex = exceptindex = copyindex = 0; 
          while ((fromindex < from.Count) && (exceptindex < except.Count)) 
          { 
              int compar = ((IComparable)from[fromindex]).CompareTo(except[exceptindex]); 
              if (compar < 0) 
              { 
                  fromindex++; 
              } 
              else if (compar > 0) 
              { 
                  exceptindex++; 
              } 
              else if (compar == 0) 
              { 
                  if (fromindex > copyindex) 
                      CopyData(from, resut, copyindex, fromindex); 
                  fromindex++; 
                  copyindex = fromindex; 
 
              } 
          } 
          CopyData(from, resut, copyindex, from.Count); 
          return resut; 
      } 
      static void CopyData<T>(List<T> from, List<T> to, int startindex, int endindex) 
      { 
          if (from == null || to == null || startindex < 0 || endindex < 0 || endindex <= startindex) return; 
          to.AddRange(from.Where((data, index) => index >= startindex && index < endindex)); 
      } 
調用方式:       List<string> temp = ExceptWith<string>(new List<string>() { "a", "b", "c", "d", "e" }, new List<string>() { "a", "b", "f" });
            List<int> a = ExceptWith<int>(new List<int>() { 1, 3, 4, 7, 9, 11 }, new List<int>() { 4, 7 });



摘自 dz45693的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved