澳门在线威尼斯官方 > 澳门在线威尼斯官方 > List泛型集合对象排序

原标题:List泛型集合对象排序

浏览次数:131 时间:2019-11-05

本文的重点主要是解决:List<T>对象集合的排序功能。

一、List<T>命名空间:

一、List<T>.Sort 方法 ()

System.Collections.Generic(程序集:mscorlib)

MSDN对这个无参Sort()方法的介绍:使用默认比较器对整个List<T>中的元素进行排序。

二、List<T>描述:  

从官方文档的介绍,很难的看出详细的解析,而且还要完整的知识结构去分析,上面提到了一个关键词:比较器。大致看了下,比较器是一个委托。在这里不去透析它的完整脉络,本文只去讲解怎么去解决两个实际的问题:

1)、表示可通过索引访问的对象的强类型列表;提供用于对列表进行搜索、排序和操作的方法。 2)、是ArrayList类的泛型等效类。 3)、可以使用一个整数索引访问此集合中的元素;索引从 零 开始。 4)、可以接收null空引用(VB中的Nothing)。 5)、允许重复元素

  • List集合元素升序排列
  • List集合元素降序排列

 

 

三、List<T>构造函数

1.1.对于数字类型的调用

 

调用结果:为升序,无法满足降序。

名称 说明
List<T>() 初始化 List<T> 类的新实例,该实例为空并且具有默认初始容量(0)。
List<T>(IEnumerable<T>) 初始化 List<T> 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。
List<T>(Int32) 始化 List<T> 类的新实例,该实例为空并且具有指定的初始容量。

示例:

说明:默认向 List<T> 添加元素时,将通过重新分配内部数组,根据需要自动增大容量。如果可以估计集合的大小,那么当指定初始容量后,将无需在向 List<T> 中添加元素时执行大量的大小调整操作。这样可提高性能。

图片 1

 

 1.2.对于字符串类型的调用

四、List<T>属性

调用结果:把值解析成拼音字母,按照首个英文字母顺序升序排列,如果首字母相同,比较第二个的首字母。

 

示例:

名称 说明
Capacity 获取或设置该内部数据结构在不调整大小的情况下能够容纳的元素总数。
Count 获取 List<T> 中实际包含的元素数。

图片 2

 说明:Capacity 是 List<T> 在需要调整大小之前可以存储的元素数,Count 则是 List<T> 中实际存储的元素数。

1.3.对于自定义对象的调用

 

调用结果:无法完成方法的执行,运行报错。

五、List<T>方法

示例:

 

图片 3

名称 说明
Add 将对象添加到 List<T> 的结尾处。
AddRange 将指定集合的元素添加到 List<T> 的末尾。
AsReadOnly 返回当前集合的只读 IList<T> 包装。
BinarySearch(T) 使用默认的比较器在整个已排序的 List<T> 中搜索元素,并返回该元素从零开始的索引。
BinarySearch(T, IComparer<T>) 使用指定的比较器在整个已排序的 List<T> 中搜索元素,并返回该元素从零开始的索引。
BinarySearch(Int32, Int32, T, IComparer<T>) 使用指定的比较器在已排序 List<T> 的某个元素范围中搜索元素,并返回该元素从零开始的索引。
Clear 从 List<T> 中移除所有元素。
Contains 确定某元素是否在 List<T> 中。
ConvertAll<TOutput> 将当前 List<T> 中的元素转换为另一种类型,并返回包含转换后的元素的列表。
CopyTo(T[]) 将整个 List<T> 复制到兼容的一维数组中,从目标数组的开头开始放置。
Exists 确定 List<T> 是否包含与指定谓词所定义的条件相匹配的元素。
Find 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中的第一个匹配元素。
FindIndex(Predicate<T>) 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中第一个匹配元素的从零开始的索引。
ForEach 对 List<T> 的每个元素执行指定操作。
GetEnumerator 返回循环访问 List<T> 的枚举器。
IndexOf(T) 搜索指定的对象,并返回整个 List<T> 中第一个匹配项的从零开始的索引。
Insert 将元素插入 List<T> 的指定索引处。
InsertRange 将集合中的某个元素插入 List<T> 的指定索引处。
LastIndexOf(T) 搜索指定的对象,并返回整个 List<T> 中最后一个匹配项的从零开始的索引。
Remove 从 List<T> 中移除特定对象的第一个匹配项。
Reverse() 将整个 List<T> 中元素的顺序反转。
Sort() 使用默认比较器对整个 List<T> 中的元素进行排序。
TrimExcess 将容量设置为 List<T> 中的实际元素数目(如果该数目小于某个阈值)。
TrueForAll 确定是否 List<T> 中的每个元素都与指定的谓词所定义的条件相匹配。

 

说明:上述方法说明中有用到“谓词”,谓词就是Predicate<T> 委托,它代表一组方法,该方法定义一组条件,并确定指定的参数对象是否符合这些条件,具体的参见示例程序。

总结:很显然这个无参的Sort()方法很难满足我们实际开发中需求,对于面向对象编程我们,常常就是对集合中的对象进行排序。

 


六、常用方法实例

 

 

二、自定义对象类型默认排序

(1)创建及初始化:

对象本身不是一个具体的值,在排序逻辑上显然要选择对象的一个属性进行排序。

List<string> myList = new List<string>();//初始Capacity为 零 List<string> myList2 = new List<string>(30); //初始Capacity为 30 List<string> myList3 = new List<string>(new string[] { "1", "a", "2", "b" });//初始Capacity 为 4,并且元素已被复制

 

 

1.1手动设置无参Sotr()方法的默认排序逻辑

(2)添加一个元素 List.Add(T item) 

将List的指定类型的类实现IComparable泛型接口,示例:

mlist.Add("d");

 1     class Student:IComparable<Student>
 2     {
 3         
 4         public string Id { get; set; }
 5         public string Name { get; set; }
 6         public int Age { get; set; }
 7 
 8         public int CompareTo(Student other)
 9         {
10             //return other.Age.CompareTo(this.Age); // 年龄降序
11             return this.Age.CompareTo(other.Age); // 年龄升序
12         }
13     }

 

排序逻辑:this在前面就意味着指定按照这个属性升序,如果写在后面就是降序。 

(3)添加集合元素

调用:

string[] Arr2 ={"f","g"."h"}; mlist.AddRange(Arr2);

      List<Student> list_obj = new List<Student> { 
               new Student { Age=23,Name="tom"},
               new Student { Age=18,Name="jack"},
               new Student {Age=28, Name="bob"},
            };

            list_obj.Sort();

            for (int i = 0; i < list_obj.Count; i++)
            {
                string output_result = string.Format("{0},年龄:{1}",list_obj[i].Name,list_obj[i].Age);
                Console.WriteLine(output_result);
            }

 

 

(4)在index位置添加一个元素 Insert(int index,T item)

在调用Sort()方法的时候,就自动调用了我们实现接口的CompareTo方法的逻辑代码。

mlist.Insert(1,"p");

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:List泛型集合对象排序

关键词:

上一篇:澳门在线威尼斯官方:自学课程,第五堂课

下一篇:澳门在线威尼斯官方:python实现冒泡排序