欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# List<T>的用法小結(jié)

 更新時(shí)間:2014年01月21日 09:43:22   作者:  
本篇文章主要是對(duì)C#中List<T>的用法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助

所屬命名空間:System.Collections.Generic    
public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

List<T>類(lèi)是 ArrayList 類(lèi)的泛型等效類(lèi)。該類(lèi)使用大小可按需動(dòng)態(tài)增加的數(shù)組實(shí)現(xiàn) IList<T> 泛型接口。

泛型的好處: 它為使用c#語(yǔ)言編寫(xiě)面向?qū)ο蟪绦蛟黾恿藰O大的效力和靈活性。不會(huì)強(qiáng)行對(duì)值類(lèi)型進(jìn)行裝箱和拆箱,或?qū)σ妙?lèi)型進(jìn)行向下強(qiáng)制類(lèi)型轉(zhuǎn)換,所以性能得到提高。

性能注意事項(xiàng):

在決定使用IList<T> 還是使用ArrayList類(lèi)(兩者具有類(lèi)似的功能)時(shí),記住IList<T> 類(lèi)在大多數(shù)情況下執(zhí)行得更好并且是類(lèi)型安全的。

如果對(duì)IList<T> 類(lèi)的類(lèi)型 T 使用引用類(lèi)型,則兩個(gè)類(lèi)的行為是完全相同的。但是,如果對(duì)類(lèi)型 T 使用值類(lèi)型,則需要考慮實(shí)現(xiàn)和裝箱問(wèn)題。

“添加到 ArrayList 中的任何引用或值類(lèi)型都將隱式地向上強(qiáng)制轉(zhuǎn)換為 Object。如果項(xiàng)是值類(lèi)型,則必須在將其添加到列表中時(shí)進(jìn)行裝箱操作,在檢索時(shí)進(jìn)行取消裝箱操作。強(qiáng)制轉(zhuǎn)換以及裝箱和取消裝箱操作都會(huì)降低性能;在必須對(duì)大型集合進(jìn)行循環(huán)訪問(wèn)的情況下,裝箱和取消裝箱的影響非常明顯。”


1、List的基礎(chǔ)、常用方法:

聲明:
1、List<T> mList = new List<T>(); 
T為列表中元素類(lèi)型,現(xiàn)在以string類(lèi)型作為例子

E.g.:List<string> mList = new List<string>();

2、List<T> testList =new List<T> (IEnumerable<T> collection);

以一個(gè)集合作為參數(shù)創(chuàng)建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)   添加一個(gè)元素

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位置添加一個(gè)元素

E.g.:mList.Insert(1, "Hei");

遍歷List中元素:

復(fù)制代碼 代碼如下:

foreach (T element in mList)  T的類(lèi)型與mList聲明時(shí)一樣
{
    Console.WriteLine(element);
}

E.g.:
復(fù)制代碼 代碼如下:

foreach (string s in mList)
{
    Console.WriteLine(s);
}

刪除元素:

1、 List. Remove(T item)刪除一個(gè)值

E.g.:mList.Remove("Hunter");

2、 List. RemoveAt(int index);   刪除下標(biāo)為index的元素

E.g.:mList.RemoveAt(0);

3、 List. RemoveRange(int index, int count);

從下標(biāo)index開(kāi)始,刪除count個(gè)元素

E.g.:mList.RemoveRange(3, 2);

判斷某個(gè)元素是否在該List中:

List. Contains(T item)   返回true或false,很實(shí)用

E.g.:

復(fù)制代碼 代碼如下:

if (mList.Contains("Hunter"))
{
    Console.WriteLine("There is Hunter in the list");
}
else
{
    mList.Add("Hunter");
    Console.WriteLine("Add Hunter successfully.");
}

給List里面元素排序:

List. Sort ()   默認(rèn)是元素第一個(gè)字母按升序

E.g.:mList.Sort();

給List里面元素順序反轉(zhuǎn):

List. Reverse ()   可以與List. Sort ()配合使用,達(dá)到想要的效果

E.g.:mList.Sort();

List清空:List. Clear ()
E.g.: mList.Clear();

獲得List中元素?cái)?shù)目:

List. Count ()    返回int值

E.g.:
int count = mList.Count();
Console.WriteLine("The num of elements in the list: " +count);

2、List的進(jìn)階、強(qiáng)大方法:

舉例用的List:

string[] temArr = { Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", " "Locu" };

mList.AddRange(temArr);

List.Find 方法:搜索與指定謂詞所定義的條件相匹配的元素,并返回整個(gè) List 中的第一個(gè)匹配元素。
public T Find(Predicate<T> match);

Predicate是對(duì)方法的委托,如果傳遞給它的對(duì)象與委托中定義的條件匹配,則該方法返回 true。當(dāng)前 List 的元素被逐個(gè)傳遞給Predicate委托,并在 List 中向前移動(dòng),從第一個(gè)元素開(kāi)始,到最后一個(gè)元素結(jié)束。當(dāng)找到匹配項(xiàng)時(shí)處理即停止。

Predicate 可以委托給一個(gè)函數(shù)或者一個(gè)拉姆達(dá)表達(dá)式:

委托給拉姆達(dá)表達(dá)式:

E.g.:

復(fù)制代碼 代碼如下:

string listFind = mList.Find(name =>  //name是變量,代表的是mList
   {      //中元素,自己設(shè)定
   if (name.Length > 3)
   {
  return true;
   }
  return false;
});
Console.WriteLine(listFind);     //輸出是Hunter

委托給一個(gè)函數(shù):

E.g.:
string listFind1 = mList.Find(ListFind);  //委托給ListFind函數(shù)
Console.WriteLine(listFind);    //輸出是Hunter

ListFind函數(shù):

復(fù)制代碼 代碼如下:

public bool ListFind(string name)
 {
if (name.Length > 3)
{
    return true;
}
return false;
 }

這兩種方法的結(jié)果是一樣的。

List.FindLast 方法:搜索與指定謂詞所定義的條件相匹配的元素,并返回整個(gè) List 中的最后一個(gè)匹配元素。
public T FindLast(Predicate<T> match);

用法與List.Find相同。

List.TrueForAll方法:  確定是否 List 中的每個(gè)元素都與指定的謂詞所定義的條件相匹配。

public bool TrueForAll(Predicate<T> match);

委托給拉姆達(dá)表達(dá)式:

E.g.:

復(fù)制代碼 代碼如下:

bool flag = mList.TrueForAll(name =>
{
    if (name.Length > 3)
    {
 return true;
    }
    else
    {
 return false;
    }
}
);
Console.WriteLine("True for all:  "+flag);  //flag值為false

委托給一個(gè)函數(shù),這里用到上面的ListFind函數(shù):

E.g.:

bool flag = mList.TrueForAll(ListFind); //委托給ListFind函數(shù)
Console.WriteLine("True for all:  "+flag);  //flag值為false

這兩種方法的結(jié)果是一樣的。

List.FindAll方法:檢索與指定謂詞所定義的條件相匹配的所有元素。

public List<T> FindAll(Predicate<T> match);

E.g.:

復(fù)制代碼 代碼如下:

List<string> subList = mList.FindAll(ListFind); //委托給ListFind函數(shù)
 foreach (string s in subList)
 {
Console.WriteLine("element in subList: "+s);
 }

這時(shí)subList存儲(chǔ)的就是所有長(zhǎng)度大于3的元素

List.Take(n):  獲得前n行 返回值為IEnumetable<T>,T的類(lèi)型與List<T>的類(lèi)型一樣

E.g.:

復(fù)制代碼 代碼如下:

IEnumerable<string> takeList=  mList.Take(5);
   foreach (string s in takeList)
   {
  Console.WriteLine("element in takeList: " + s);
   }

這時(shí)takeList存放的元素就是mList中的前5個(gè)

List.Where方法:檢索與指定謂詞所定義的條件相匹配的所有元素。跟List.FindAll方法類(lèi)似。

E.g.:

復(fù)制代碼 代碼如下:

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);

  }


這時(shí)subList存儲(chǔ)的就是所有長(zhǎng)度大于3的元素

List.RemoveAll方法:移除與指定的謂詞所定義的條件相匹配的所有元素。

public int RemoveAll(Predicate<T> match);

E.g.:

復(fù)制代碼 代碼如下:

mList.RemoveAll(name =>
    {
 if (name.Length > 3)
 {
return true;
 }
 else
 {
return false;
 }
    });

foreach (string s in mList)
{
    Console.WriteLine("element in mList:     " + s);
}


這時(shí)mList存儲(chǔ)的就是移除長(zhǎng)度大于3之后的元素。

List<T> 是一個(gè)泛型鏈表...T表示節(jié)點(diǎn)元素類(lèi)型
比如
List<int> intList;表示一個(gè)元素為int的鏈表
intList.Add(34); //添加
intList.Remove(34);//刪除
intList.RemoveAt(0); //刪除位于某處的元素
intList.Count; //鏈表長(zhǎng)度
還有Insert,Find,FindAll,Contains等方法,也有索引方法 intList[0] = 23;
1.減少了裝箱拆箱
2.便于編譯時(shí)檢查數(shù)據(jù)類(lèi)型

List<Object> 就相當(dāng)于 System.Collections命名空間里面的List

相關(guān)文章

最新評(píng)論