1. 程式人生 > >關於List集合的一些基本操作

關於List集合的一些基本操作

宣告需要操作的Student類以及要轉換的Person類

public class Student:IFormattable,IComparable<Student>
    {
        public int ID { get; set; }
        public string Name { get; set; }

        public double Score { get; set; }
        public Student(int id,string name,double score)
        {
            this.ID = id;
            this.Name = name;
            this.Score = score;
        }
        public override string ToString()
        {
            return string.Format( "Name:{0} ",Name);
        }

        public string ToString(string format, IFormatProvider formatProvider)
        {
            if (format==null) format = "N";
            switch (format.ToUpper())
            {
                case "N":   //Name
                    return ToString();
                case "NI":  //Name ID
                    return string.Format("Name:{0},ID:{1}",Name,ID);
                case "A":  //Name ID Score
                    return string.Format("Name:{0},ID:{1},Sceor:{2}", Name, ID, Score);
                default:
                    throw new FormatException(string.Format(formatProvider, "Format{0} is not suported", format));
            }
        }
        //實現排序功能,需要實現此方法,預設用名排序
        public int CompareTo(Student other)
        {
            int compare = this.Name.CompareTo(other.Name);
            if (compare==0)
            {
                return this.Score.CompareTo(other.Score);
            }
            return compare;
        }
    }
    public class Person
    {
        public int Id;

        public string Name;

        public Person(string name,int id)
        {
            this.Name = name;
            this.Id = id;
        }

    }

基本操作命令

var XM = new Student(001,"小明",80);
            var XG = new Student(002,"小剛",85);
            var stus = new List<Student>() { XM, XG };
            stus.Add(new Student(003,"小紅",90));

            //通過AddRange新增多個
            stus.AddRange(new Student[] { new Student(004,"小芳",85),new Student(005,"小麗",82)});

            //初始化時直接新增多個例項
            //var stus = new List<Student>(new Student[] { new Student(004, "小芳", 85), new Student(005, "小麗", 82) });

            //通過Insert新增
            //stus.Insert(2,new Student(002,"小李",58));

            //通過InsertRange在指定索引處新增
            //stus.InsertRange(2,new Student[] { new Student(004, "小芳", 85), new Student(005, "小麗", 82) });

            //通過所引起訪問
            Student stu1 = stus[2];

            //統計列表的數量
            //Console.WriteLine(stus.Count);

            //通過For迴圈列印列表
            //for (int i = 0; i < stus.Count; i++)
            //{
            //    Console.WriteLine(stus[i]);
            //}

            //通過foreach列印
            //foreach (Student stu in stus)
            //{
            //    Console.WriteLine(stu);
            //}

            //通過ForEach列印
            stus.ForEach(Console.WriteLine);

            //可以通過更改A來控制顯示的資訊
            stus.ForEach(r => Console.WriteLine("{0:A}",r));

            //根據索引刪除元素
            //stus.RemoveAt(3);

            //根據物件移除
            //stus.Remove(stus[2]);
            //stus.Remove(XG);
            //int index1 = stus.IndexOf();

            //通過物件某個屬性查詢匹配物件的索引
            int index2 = stus.FindIndex(r => r.ID == 003);

            //通過物件某個屬性查詢所有匹配物件中的第一個物件
            var stu2 = stus.FindIndex(r => r.ID == 003);

            //通過物件某個屬性查詢所有匹配物件中的最後一個物件
            var stu3 = stus.FindLast(r => r.ID == 003);

            //只有集合中的元素實現了Icomparable介面,才能使用不帶引數的Sort()方法

            //查詢符合條件的例項集合
            List<Student> stus1 = stus.FindAll(r=>r.Score>90);

            //通過reverse()方法可以逆轉序列
            stus.Reverse();

            //根據分數對列表排序
            stus.Sort((s1,s2)=>s1.Score.CompareTo(s2.Score));

            //將student列表轉成erson列表,注意兩個類之間屬性的轉換關係
            List<Person> persons = stus.ConvertAll(s=>new Person(s.Name,s.ID));
            persons.ForEach(s=>Console.WriteLine(s.Name+s.Id));