List泛型集合
文章目錄
- 1 List泛型集合的使用
- 1.1 List\簡(jiǎn)要介紹
- 1.2 List\的創(chuàng)建
- 1.3 List\和Array的互相轉(zhuǎn)換
- 1.4 List\刪除元素
- 1.5 List\的遍歷
- 1.6 List\的快速查詢
- 2 List泛型集合的排序
- 2.1 值類型元素的排序
- 2.2 類類型元素使用默認(rèn)比較器進(jìn)行排序
- 2.3 類類型元素使用比較器接口進(jìn)行排序
- 2.4 其他高級(jí)排序方法
- 3 泛型集合List作為DataGridView數(shù)據(jù)源展示和動(dòng)態(tài)排序?qū)崿F(xiàn)
- 3.1 項(xiàng)目文件和界面UI
- 3.2 代碼實(shí)現(xiàn)
1 List泛型集合的使用
1.1 List<T>簡(jiǎn)要介紹
對(duì)于集合:定義的時(shí)候,無(wú)需規(guī)定元素的個(gè)數(shù)。
泛型:表示一種程序特性,也就是我們?cè)诙x的時(shí)候,無(wú)需指定特定的類型,而在使用的時(shí)候,我們必須明確類型。可以應(yīng)用在集合中、方法中、類中。表示為<T>。<T>表示泛型,T是Type的簡(jiǎn)寫,表示當(dāng)前不確定具體類型。可以根據(jù)用戶的實(shí)際需要,確定當(dāng)前集合需要存放的數(shù)據(jù)類型,一旦確定不可改變。
要求:添加到集合中的元素類型,必須和泛型集合定義時(shí)規(guī)定的數(shù)據(jù)類型完全一致。數(shù)據(jù)取出后無(wú)需強(qiáng)制轉(zhuǎn)換。
使用前的準(zhǔn)備:
- 引入命名空間:System.Collections.Generic。
- 確定存儲(chǔ)類型:List students = new List();
1.2 List<T>的創(chuàng)建
1.3 List<T>和Array的互相轉(zhuǎn)換
//集合轉(zhuǎn)換到數(shù)組 Course[] courseArray2 = courseList.ToArray(); //數(shù)組直接轉(zhuǎn)換到集合 List<Course> courseList3 = courseArray2.ToList();1.4 List<T>刪除元素
courseList.Remove(course3);//必須要掌握 courseList.RemoveAll(c => c.CourseId > 10002);//了解 courseList.RemoveAt(2); courseList.RemoveRange(1, 2);1.5 List<T>的遍歷
1.6 List<T>的快速查詢
集合查詢方法1:
List<Course> result1 = courseList.FindAll(c => c.CourseId > 10003);集合查詢方法2:
var result2 = from c in courseList where c.CourseId > 10003 select c; var result3 = result2.ToList();2 List泛型集合的排序
2.1 值類型元素的排序
List<int> ageList = new List<int> { 20, 19, 25, 30, 26 }; ageList.Sort();//默認(rèn)按照升序排列foreach (int item in ageList) {Console.WriteLine(item); } ageList.Reverse(); //降序foreach (int item in ageList) {Console.WriteLine(item); }2.2 類類型元素使用默認(rèn)比較器進(jìn)行排序
我們對(duì)需要排序的類實(shí)現(xiàn)系統(tǒng)接口IComparable<Course>。
public class Course : IComparable<Course> {public Course() { }public Course(int courseId, string courseName, int classHour, string teacher){this.CourseId = courseId;this.CourseName = courseName;this.ClassHour = classHour;this.Teacher = teacher;}public int CourseId { get; set; }//課程編號(hào)public string CourseName { get; set; }//課程名稱public int ClassHour { get; set; }//課時(shí)public string Teacher { get; set; }//主講老師//接口對(duì)應(yīng)的比較方法(這個(gè)方法的簽名,千萬(wàn)不要?jiǎng)?#xff09;public int CompareTo(Course other){//return this.CourseId.CompareTo(other.CourseId);return other.CourseId.CompareTo(CourseId);//如果把this放到前面,表示按照升序排列,other放到前面就是按照降序排列} }2.3 類類型元素使用比較器接口進(jìn)行排序
以上我們使用默認(rèn)比較器進(jìn)行排序,很不方便,如果我們需要多種排序,怎么辦?比較器接口:其實(shí)就是我們可以任意的指定對(duì)象屬性排序,從而實(shí)現(xiàn)動(dòng)態(tài)排序。
/// <summary> /// 課程編號(hào)升序 /// </summary> class CourseIdASC : IComparer<Course> {public int Compare(Course x, Course y){return x.CourseId.CompareTo(y.CourseId);} }// 使用方式 //排序方法的定義: public void Sort(IComparer<T> comparer); courseList.Sort(new CourseIdASC());2.4 其他高級(jí)排序方法
// 使用LINQ實(shí)現(xiàn)排序 var list1 = from c in courseList orderby c.CourseId ascending select c; // 使用擴(kuò)展方法OrderByDescending實(shí)現(xiàn)降序 var list2 = courseList.OrderByDescending(c => c.CourseId); // 使用擴(kuò)展方法OrderBy實(shí)現(xiàn)升序 var list3 = courseList.OrderBy(c => c.ClassHour);3 泛型集合List作為DataGridView數(shù)據(jù)源展示和動(dòng)態(tài)排序?qū)崿F(xiàn)
3.1 項(xiàng)目文件和界面UI
項(xiàng)目文件如下:
界面UI:
對(duì)于界面中的DataGridView需要注意,啟用添加、啟用編輯、啟用刪除、啟用列重新排序全部不要勾選。
3.2 代碼實(shí)現(xiàn)
FrmMain.cs:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace ListOrder_20191217 {public partial class FrmMain : Form{List<Student> list = null;public FrmMain(){InitializeComponent();InitList();}private void InitList(){Student student1 = new Student() { Name = "Lili", Age = 20, Id = "1000", Addr = "廣東省廣州市" };Student student2 = new Student() { Name = "Mary", Age = 22, Id = "1004", Addr = "北京市" };Student student3 = new Student() { Name = "Yang", Age = 25, Id = "1001", Addr = "湖南省長(zhǎng)沙市" };Student student4 = new Student() { Name = "LangLang", Age = 23, Id = "1003", Addr = "湖北省武漢市" };Student student5 = new Student() { Name = "Chi", Age = 28, Id = "1002", Addr = "廣西省桂林市" };list = new List<Student>() { student1, student2, student3, student4, student5 };}private void btnShowStuInfo_Click(object sender, EventArgs e){dgvStuInfo.DataSource = list;//dgvStuInfo.AutoResizeColumns();}private void btnASCOrderById_Click(object sender, EventArgs e){dgvStuInfo.DataSource = list;list.Sort(new IdASC());dgvStuInfo.Refresh();}private void btnDESCOrderById_Click(object sender, EventArgs e){dgvStuInfo.DataSource = list;list.Sort(new IdDESC());dgvStuInfo.Refresh();}} }Student.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ListOrder_20191217 {public class Student{public string Name { get; set; }public int Age { get; set; }public string Id { get; set; }public string Addr { get; set; }}/// <summary>/// 學(xué)號(hào)升序排列/// </summary>public class IdASC : IComparer<Student>{public int Compare(Student x, Student y){return x.Id.CompareTo(y.Id);}}/// <summary>/// 學(xué)號(hào)降序排列/// </summary>public class IdDESC : IComparer<Student>{public int Compare(Student x, Student y){return y.Id.CompareTo(x.Id);}} }參考資料:
總結(jié)
- 上一篇: 用java开发一个Hello Word系
- 下一篇: C51中变量类型和范围