C#List的用法詳解(轉載筆記)

C# List<T>用法
 
所屬命名空間:System.Collections.Generic    
public class List<T> : IList<T>,ICollection<T>, IEnumerable<T>, IList,ICollection, IEnumerable
  List<T>類是 ArrayList 類的泛型等效類。該類使用大小可按需動態增加的數組實現 IList<T> 泛型接口。
 
 泛型的好處: 它爲使用c#語言編寫面向對象程序增加了極大的效力和靈活性。不會強行對值類型進行裝箱和拆箱,或對引用類型進行向下強制類型轉換,所以性能得到提高。
 
性能注意事項:
在決定使用IList<T> 還是使用ArrayList類(兩者具有類似的功能)時,記住IList<T> 類在大多數情況下執行得更好並且是類型安全的。
如果對IList<T> 類的類型 T 使用引用類型,則兩個類的行爲是完全相同的。但是,如果對類型 T 使用值類型,則需要考慮實現和裝箱問題。
   用微軟的話講:
“添加到ArrayList 中的任何引用或值類型都將隱式地向上強制轉換爲Object。如果項是值類型,則必須在將其添加到列表中時進行裝箱操作,在檢索時進行取消裝箱操作。強制轉換以及裝箱和取消裝箱操作都會降低性能;在必須對大型集合進行循環訪問的情況下,裝箱和取消裝箱的影響非常明顯。”
 
1、  List的基礎、常用方法:
聲明:
1、List<T> mList = new List<T>(); 
T爲列表中元素類型,現在以string類型作爲例子
E.g.: List<string> mList= new List<string>();
 
2、  List<T>testList =new List<T> (IEnumerable<T>collection);
     以一個集合作爲參數創建List
      E.g.:
string[] temArr = { "Ha","Hunter", "Tom","Lily", "Jay","Jim", "Kuku","Locu" };
List<string>testList = new List<string>(temArr);
 
添加元素:
1、 List. Add(T item)   添加一個元素
E.g.:    mList.Add("John");
2、  List. AddRange(IEnumerable<T>collection)   添加一組元素
E.g.:
string[] temArr = { "Ha","Hunter", "Tom","Lily", "Jay","Jim", "Kuku",  "Locu"};
mList.AddRange(temArr);
 
3、Insert(int index, T item);    在index位置添加一個元素
E.g.:    mList.Insert(1, "Hei");
遍歷List中元素:
foreach (T element in mList)  T的類型與mList聲明時一樣
            {
                Console.WriteLine(element);
            }
E.g.:
foreach (string s in mList)
            {
                Console.WriteLine(s);
            }
 
刪除元素:
  1、 List. Remove(T item)       刪除一個值
E.g.:   mList.Remove("Hunter");
  2、 List. RemoveAt(intindex);   刪除下標爲index的元素
E.g.:   mList.RemoveAt(0);
                       3、 List. RemoveRange(intindex, int count);
從下標index開始,刪除count個元素
      E.g.:   mList.RemoveRange(3, 2);
 
判斷某個元素是否在該List中:
List. Contains(T item)   返回true或false,很實用
E.g.:
if (mList.Contains("Hunter"))
            {
                Console.WriteLine("There is Hunter in the list");
            }
            else
            {
                mList.Add("Hunter");
                Console.WriteLine("Add Hunter successfully.");
            }
 
 
給List裏面元素排序:
List. Sort ()   默認是元素第一個字母按升序
E.g.:   mList.Sort();
給List裏面元素順序反轉:
List. Reverse ()   可以與List. Sort ()配合使用,達到想要的效果
E.g.:   mList.Sort();
 
 List清空:List. Clear ()
E.g.:   mList.Clear();
  獲得List中元素數目:
List. Count ()    返回int值
E.g.:
int count = mList.Count();
       Console.WriteLine("The num of elements in the list: "+count);
 
 
2、  List的進階、強大方法:
舉例用的List:
string[] temArr = { Ha","Hunter", "Tom","Lily", "Jay","Jim", "Kuku"," "Locu"};
mList.AddRange(temArr);
 
 
List.Find 方法:搜索與指定謂詞所定義的條件相匹配的元素,並返回整個 List 中的第一個匹配元素。
public T Find(Predicate<T>match);
Predicate是對方法的委託,如果傳遞給它的對象與委託中定義的條件匹配,則該方法返回 true。當前 List 的元素被逐個傳遞給Predicate委託,並在 List 中向前移動,從第一個元素開始,到最後一個元素結束。當找到匹配項時處理即停止。
Predicate 可以委託給一個函數或者一個拉姆達表達式
委託給拉姆達表達式:
E.g.:
            stringlistFind = mList.Find(name =>  //name是變量,代表的是mList
            {                              //中元素,自己設定
                if(name.Length > 3)
                {
                    returntrue;
                }
                returnfalse;
            });
           Console.WriteLine(listFind);     //輸出是Hunter
 
委託給一個函數:
E.g.:
string listFind1 = mList.Find(ListFind);   //委託給ListFind函數
Console.WriteLine(listFind);           //輸出是Hunter
 
ListFind函數:
public bool ListFind(string name)
        {
            if(name.Length > 3)
            {
                returntrue;
            }
            returnfalse;
        }
這兩種方法的結果是一樣的。
 
List.FindLast 方法:搜索與指定謂詞所定義的條件相匹配的元素,並返回整個 List 中的最後一個匹配元素。
public T FindLast(Predicate<T>match);
用法與List.Find相同。
List.TrueForAll方法:  確定是否 List 中的每個元素都與指定的謂詞所定義的條件相匹配。
 public bool TrueForAll(Predicate<T> match);
委託給拉姆達表達式:
E.g.:
            bool flag= mList.TrueForAll(name =>
            {
                if(name.Length > 3)
                {
                    returntrue;
                }
                else
                {
                    returnfalse;
                }
            }
            );
   Console.WriteLine("Truefor all:  "+flag);  //flag值爲false
 
委託給一個函數,這裏用到上面的ListFind函數:
E.g.:
  bool flag = mList.TrueForAll(ListFind); //委託給ListFind函數
Console.WriteLine("True forall:  "+flag);  //flag值爲false
 
這兩種方法的結果是一樣的。
 
List.FindAll方法:檢索與指定謂詞所定義的條件相匹配的所有元素。
public List<T>FindAll(Predicate<T> match);
E.g.:
List<string> subList =mList.FindAll(ListFind); //委託給ListFind函數
        foreach (string s in subList)
        {
            Console.WriteLine("element in subList: "+s);
        }
        這時subList存儲的就是所有長度大於3的元素
 
List.Take(n):  獲得前n行 返回值爲IEnumetable<T>,T的類型與List<T>的類型一樣
E.g.:
IEnumerable<string>takeList=  mList.Take(5);
          foreach(string s intakeList)
          {
              Console.WriteLine("element in takeList: " + s);
          }
       這時takeList存放的元素就是mList中的前5個
 
List.Where方法:檢索與指定謂詞所定義的條件相匹配的所有元素。跟List.FindAll方法類似。
E.g.:
            IEnumerable<string> whereList = mList.Where(name =>
                {
 
                    if(name.Length > 3)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                });
         foreach (string s in subList)
         {
             Console.WriteLine("element in subList: "+s);
         }
         這時subList存儲的就是所有長度大於3的元素
 
List.RemoveAll方法:移除與指定的謂詞所定義的條件相匹配的所有元素。
public int RemoveAll(Predicate<T> match);
E.g.:
            mList.RemoveAll(name =>
                {
                    if(name.Length > 3)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                });
            foreach (string s in mList)
            {
                Console.WriteLine("element in mList:     " + s);
            }
      這時mList存儲的就是移除長度大於3之後的元素。
 
 
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章