加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C# List<T>用法

发布时间:2021-07-06 05:55:19 所属栏目:大数据 来源: https://blog.csdn.net/kasama1
导读:C# ListT用法 所属命名空间:System.Collections.Generic? ? ? ? ? public? class? ListT :? IListT,? ICollectionT,? IEnumerableT,? IList,? ICollection,? IEnumerable ? ? ListT类是? ArrayList? 类的泛型等效类。该类使用大小可按需动态增加的数组实现?

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",??"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(int?index);???删除下标为index的元素

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

??3、?List.?RemoveRange(int?index,?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",?"?"Locu"?};

mList.AddRange(temArr);

?

List.Find?方法:搜索与指定谓词所定义的条件相匹配的元素,并返回整个?List?中的第一个匹配元素。?

public?T Find(Predicate<T> match);

Predicate是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回?true。当前?List?的元素被逐个传递给Predicate委托,并在?List?中向前移动,从第一个元素开始,到最后一个元素结束。当找到匹配项时处理即停止。

Predicate?可以委托给一个函数或者一个拉姆达表达式:

委托给拉姆达表达式:

E.g.:

??????string?listFind = mList.Find(name =>??//name是变量,代表的是mList

??????{??????????????????????????????//中元素,自己设定

??????????if?(name.Length > 3)

??????????{

??????????????return?true;

??????????}

??????????????return?false;

???????});

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

????????????{

????????????????return?true;

????????????}

????????????return?false;

????????}

这两种方法的结果是一样的。

?

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)

????????????????{

????????????????????return?true;

????????????????}

????????????????else

????????????????{

????????????????????return?false;

????????????????}

????????????}

????????????);

???Console.WriteLine("True for all:??"+flag);??//flag值为false

?

委托给一个函数,这里用到上面的ListFind函数:

E.g.:

??bool?flag = mList.TrueForAll(ListFind);?//委托给ListFind函数

Console.WriteLine("True for all:??"+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?in?takeList)

??????????{

??????????????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之后的元素。

?

?

?

?

List<T> 是一个泛型链表...T表示节点元素类型@H_502_3488@ 比如@H_502_3488@ List<int> intList;表示一个元素为int的链表@H_502_3488@ intList.Add(34); //添加@H_502_3488@ intList.Remove(34);//删除@H_502_3488@ intList.RemoveAt(0); //删除位于某处的元素@H_502_3488@ intList.Count; //链表长度@H_502_3488@ 还有Insert,Find,FindAll,Contains等方法,也有索引方法 intList[0] = 23;@H_502_3488@ 1.减少了装箱拆箱@H_502_3488@ 2.便于编译时检查数据类型@H_502_3488@@H_502_3488@ List<Object> 就相当于 System.Collections命名空间里面的List

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读