轩辕kuku
论坛版主
论坛版主
  • UID14
  • 粉丝6
  • 关注1
  • 发帖数78
  • 社区居民
  • 原创写手
阅读:838回复:0

C#中类型List<T>的常用方法介绍

楼主#
更多 发布于:2016-04-25 23:10
List:表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。官方API参考MSDN:https://msdn.microsoft.com/zh-cn/library/6sh2ey19.aspx
在用list的过程中,我们会比较Array,ArrayList。他们之间有些差异:
Array:数组,优点:检索速度快,赋值取值很方便,存储连续;缺点:定义的时候必须限定长度,短了会内存溢出,长了浪费内存,后面插入也比较麻烦;
ArrayList:继承了Ilist的接口,继承这个借口之后就解决了一些Array上面的不足,比如长度可以动态改变。但是ArrayList里面存在的都是object,不管你插入的是int类型还是String类型,都会被封箱操作为object,那么你在获取数据的时候也就要拆箱操作,转化类型,存在数据安全问题;
List:优点就不用多说了,能够动态添加,本身方法里面有很多很实用的方法,比如排序,查找等等,很方便使用。相比之下的缺点就是其内存的消耗、访问和查找会逊色于数组,主要原因还是在其数据结构上,数组是连续存储,链表则不是。
List的在编程中使用会比较多,除了因为其list<T>泛型特点外,个人觉得它自身带的方法很好用。
比如;
List.Exists(Predicate<T>)  、Find(Predicate<T>)、Remove(Predicate<T>)这些常用的方法,其中Predicate<T>委托都很方便我们去扩展,添加筛选条件。
List.sort(IComparer<T>)这个排序的方法也是常用,IComparer中的具体也是可以自己去实现的。

利用List.Sort排序常用方法有三种:(之前有学习过这个帖子,挺不错的:http://www.cnblogs.com/bradwarden/archive/2012/06/19/2554854.html
一、实现IComparer方法
//定义IComparer  
public class myComparer : IComparer&lt;NodeDataRel&gt; {  
    int IComparer&lt;NodeDataRel&gt;.Compare(NodeDataRel x, NodeDataRel y)  
    {  
        return x.id - y.id;  
    } }     //调用  
Nodelist.Sort(new myComparer());
二、利用C#的Linq语句

private static void ReadT(string str) {  
            List&lt;Info&gt; infoList = new List&lt;Info&gt;();  
            infoList.Add(  
                new Info() { Id = 1, Name = "woft" });  
            infoList.Add(new Info() { Id=3,Name="rose"});  
            infoList.Add(new Info() { Id = 2, Name = "abc" });  
            Console.WriteLine("ReadT*********************");  
            IEnumerable&lt;Info&gt; query = null;  
            query = from items in infoList orderby items.Id select items;  
            foreach (var item in query)  
            {  
                Console.WriteLine(item.Id+":"+item.Name);  
            }  
        }
查找Find函数:
int index = currentNodeslist.FindIndex(nodeDataRel =&gt; nodeDataRel.id == i.nodeId);
三、就是利用委托方法
List&lt; Transform &gt; list = new List&lt; Transform &gt;();  
for (int i = 0; i &lt; t.childCount; i++) {  
    list.Add(t.GetChild(i)); }  
list.Sort( delegate (Transform t1, Transform t2) {  
    return t2.localPosition.x.CompareTo(t1.localPosition.x);  
});

我用委托的方式会比较多,很方便

图片:68_6_5c30f250d2c870a.jpg

欢迎分享

游客

返回顶部