日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

变化多端的列表

發布時間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 变化多端的列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

變化多端的列表

集合大家都不陌生,但是實際應用確實有時候讓人無從下手。其比數組最大的好處就是針對多變的動態的元素降服之功能!妙哉,筆者通過《C#高級編程》集合章節發現集合也會“博大精深,變化多端”的。但是有不同于書本,那么大一本厚書,讓人敬而遠之,特別一些些一套套理論的東西更是頭大。筆者準備從集合的列表,隊列,棧,鏈表,有序表,字典,等分系列發布。盡可呢避免大篇理論(核心的還是要強調的)。然后筆者自己做一些小實例,通過自己總結描述設計思想,結合代碼實現,加以重點強調語句。最后配上運行結果!盡可能達到初學者有所悟吧。

【列表】:針對列表適合于動態創建元素。下面結合多變的創建方法,多種方法添加元素,插入元素,訪問元素的幾種方式,刪除搜索和排序。來一一揭示列表的妙處和用途!

實例描述:創建student.cs類(繼承IComparable<student>, IFormattable),包含姓名,性別,年齡屬性。帶參數的構造函數,重載ToString(實現根據條件查詢),以及自定義ToString,排序方法,IFormattable的使用

主程序:實現多方法添加,插入,刪除,查詢等


[1],創建列表,添加數據的三種形式:

方式一:對象添加法,逐一創建對象,然后在泛型列表中添加對象。

                student stu1 = new student("小華", "男", 21);
                student stu2 = new student("小明", "男", 22);
                student stu3 = new student("小麗", "女", 19);
                List<student> students = new List<student>() { stu1, stu2, stu3 };

方式二:對象添加法,逐一創建對象,然后在泛型列表中添加對象。

students.Add(new student("小花", "女", 23));

方式三:批量添加

               students.AddRange(new student[]{
                new student("小王", "女", 19),
                new student("小白", "女", 19)
                });

運行結果:

[2]泛型空間大小根據容量自動增加。即:初始為n,第一次自增2n,第二次自增4n。諸如此類,每次容量是上次2倍大小。

students.Capacity = 100;//手動設置泛型空間大小

[3]插入元素

students.Insert(2, new student("新人小王", "女", 22));

運行結果:

[4]讀取數據的幾種方法

1,object類的四個基本方法之一就是ToString,它是個虛方法,可以重載,設置自己想要的效果

        //重載ToString()方法
        public override string ToString()
        {
            return String.Format("我的名字是:{0},性別:{1},今年{2}歲!", name, sex, age);
        }
  

2,自定義ToString(T)方法,format是T的參數

        //自定義
        public string ToString(string format)
        {
            return ToString(format, null);//如果找到該實例則根據format查找相應結果,反之為null
        }

3,根據條件通過ToString(T)篩選數據

        public string ToString(string format, IFormatProvider formatProvider)
        {
            switch (format.ToUpper())
            {
                case null:
                case "N":
                    return name;
                case "S":
                    return sex;
                case "A":
                    return String.Format("{0},{1}年齡:{2}", name, sex, age);
                default:
                    return String.Format("你輸入的{0}不合法!",format);
                    //throw new FormatException(String.Format(formatProvider, "Format{0}is not supported", format));
            }
        }

方法一:for循環student所有對象原則查詢

1:根據名字(N)查詢

                for (int i = 0; i < students.Count; i++)
                {
                    //1,根據自定義ToString訪問
                    //方法1:根據條件N查詢name
                    Console.WriteLine(students[i].ToString("N"));
                 }

運行結果:

2:根據條件A查詢全部信息

                for (int i = 0; i < students.Count; i++)
                {
                    //方法2:根據條件A查詢全部信息
                   Console.WriteLine(students[i].ToString("A"));
                  }

運行結果:

3:利用重載ToString()查詢

                for (int i = 0; i < students.Count; i++)
                {
                    //方法3:利用重載ToString()查詢
                    Console.WriteLine(students[i].ToString());
                 }

運行結果:

4利用非法條件查詢

                for (int i = 0; i < students.Count; i++)
                {
                    //方法4:利用非法條件查詢
                     Console.WriteLine(students[i].ToString("T"));
                  }

運行結果:

方法二:根據索引

?

<span style="font-size: 15px;"> student s1 = students[3];
Console.WriteLine(s1);
</span>

方法三:List<T>執行接口IEnumerable,foreach迭代法

                foreach (student stu in students)
                {
                    Console.WriteLine(stu);
                }

方法四:ForEach查詢:以下兩句效果一樣,第一句拉姆達查詢

?

<span style="font-size: 15px;"> students.ForEach(r => Console.WriteLine("{0:A}", r));
students.ForEach(delegate(student r) { Console.WriteLine("{0:A}", r); });
</span>

方法三/四結果:

 

[5]刪除元素

students.RemoveAt(2);

運行結果:(同上圖相比較)

[6]搜索的幾種方法

根據名字搜索類,以下創建查找方法,便于下文使用。

 public class FindName
   {
       public string name;
       public FindName(string name)
       {
           this.name = name;
       }
       public bool FindNamePredicate(student stu)
       {
           if (stu == null)
           {
               throw new ArgumentNullException("stu");
               //Console.WriteLine("您查詢的對象不存在!");
           }
           else
           {
               return stu.name == name;
           }
       }
   }

三種搜索方式

                //1 查詢對象索引
                int index1 = students.IndexOf(stu2);
                Console.WriteLine(index1);
                //2 根據名字查詢
                int index2 = students.FindIndex(new FindName("小白").FindNamePredicate);
                Console.WriteLine(index2);
                //3 拉姆達查詢
                int index3 = students.FindIndex(r => r.name == "小白");
                Console.WriteLine(index3);

結果:

[7]在student類中排序方法如下:

  //排序
        public int CompareTo(student other)
        {
            int compare = this.age.CompareTo(other.age);
            if (compare == 0)
            {
                return this.name.CompareTo(other.name);
            }
            return compare;
        }

以下四種排序方法:

                //1 拉姆達方法
                int s = stu2.CompareTo(stu1);
                students.Sort((r1, r2) => r1.age.CompareTo(r2.age));
                //升序
                students.Sort();
                //降序
                students.Reverse();
                //ForEach指定
                students.ForEach(r => Console.WriteLine("{0:A}", r));
                Console.WriteLine(s);

[8]本demo完整代碼:
1,兩個類的設計如下:student和FindName

View Code

public  class student :IComparable<student>, IFormattable
    {
        //設置屬性:姓名,性別,年齡
        public string name { get; set; }
        public string sex { get; set; }
        public int age { get; set; }
        //構造自定義方法
        public student(string name, string sex, int age)
        {
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        //重載ToString()方法
        public override string ToString()
        {
            return String.Format("我的名字是:{0},性別:{1},今年{2}歲!", name, sex, age);
        }
        //自定義
        public string ToString(string format)
        {
            return ToString(format, null);//如果找到該實例則根據format查找相應結果,反之為null
        }
        public string ToString(string format, IFormatProvider formatProvider)
        {
            switch (format.ToUpper())
            {
                case null:
                case "N":
                    return name;
                case "S":
                    return sex;
                case "A":
                    return String.Format("{0},{1}年齡:{2}", name, sex, age);
                default:
                    return String.Format("你輸入的{0}不合法!",format);
                    //throw new FormatException(String.Format(formatProvider, "Format{0}is not supported", format));
            }
        }
       //排序
        public int CompareTo(student other)
        {
            int compare = this.age.CompareTo(other.age);
            if (compare == 0)
            {
                return this.name.CompareTo(other.name);
            }
            return compare;
        }
    }
   public class FindName
   {
       public string name;
       public FindName(string name)
       {
           this.name = name;
       }
       public bool FindNamePredicate(student stu)
       {
           if (stu == null)
           {
               throw new ArgumentNullException("stu");
               //Console.WriteLine("您查詢的對象不存在!");
           }
           else
           {
               return stu.name == name;
           }
       }
   }

2客戶端效果:

View Code

 static void Main(string[] args)
        {
            try
            {
//添加數據的三種形式
                //方式一
                student stu1 = new student("小華", "男", 21);
                student stu2 = new student("小明", "男", 22);
                student stu3 = new student("小麗", "女", 19);
                List<student> students = new List<student>() { stu1, stu2, stu3 };
                //泛型空間大小根據容量自動增加。即:初始為n,第一次自增2n,第二次自增4n。諸如此類,每次容量是上次2倍大小。
                students.Capacity = 100;//手動設置泛型空間大小
                //方式二
                students.Add(new student("小花", "女", 23));
                //方式三
                students.AddRange(new student[]{
                new student("小王", "女", 19),
                new student("小白", "女", 19)
                });
//插入元素
                students.Insert(2, new student("新人小王", "女", 22));

                #region for
                //讀取數據的幾種方法
                //for (int i = 0; i < students.Count; i++)
                //{
                //    //1,根據自定義ToString訪問
                //    //方法1:根據條件N查詢name
                //    Console.WriteLine(students[i].ToString("N"));
                //    //方法2:根據條件A查詢全部信息
                //    Console.WriteLine(students[i].ToString("A"));
                //    //方法3:利用重載ToString()查詢
                //    Console.WriteLine(students[i].ToString());
                //    //方法4:利用非法條件查詢
                //     Console.WriteLine(students[i].ToString("T"));
                //    //2,根據索引
                //     //student s1 = student[3];
                //}
                #endregion

                #region foreach
                //3,List<T>執行接口IEnumerable,foreach迭代法
                //foreach (student stu in students)
                //{
                //    Console.WriteLine(stu);
                //}
                #endregion
                
                #region ForEach
                //students.ForEach(r => Console.WriteLine("{0:A}", r));
                //students.ForEach(delegate(student r) { Console.WriteLine("{0:A}", r); });
                #endregion
//刪除元素
               // students.RemoveAt(2);
//搜索的幾種方法
                //int index1 = students.IndexOf(stu2);//查詢對象索引
                ////int index2 = students.FindIndex(new FindName("小白").FindNamePredicate);
                //int index3 = students.FindIndex(r=>r.name=="小白");
                //Console.WriteLine(index3);
//排序
               //int s=stu2.CompareTo(stu1);
               // students.Sort((r1, r2) => r1.age.CompareTo(r2.age));
                //students.Sort();
                students.Reverse();
                students.ForEach(r => Console.WriteLine("{0:A}", r));
               //Console.WriteLine(s);
            }
            catch(Exception ex) {
                Console.WriteLine(ex.Message);
            }
           

           Console.ReadKey();
          
        }

【結尾】:本文重點突出集合列表的用法,特別多種用法的掌握。比如一個添加數據,與其逐個對象的添加,不如分組效果好。還有查詢時,for循環性能不高而且代碼比較多。foreach就比較好理解啦,看起來也簡便。最簡便的當然拉姆達法則啦。諸如此類,可以總結很多東西。明白它的構造和使用方法。才能靈活運行!

http://www.cnblogs.com/baiboy

分類:C#

作者:Leo_wl
    出處:http://www.cnblogs.com/Leo_wl/
    本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
版權信息

總結

以上是生活随笔為你收集整理的变化多端的列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。