日韩性视频-久久久蜜桃-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/
    本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
版權信息

總結

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

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

主站蜘蛛池模板: 色哟哟一区二区三区 | 五月婷网站 | 337p色噜噜| 欧美整片在线 | 日韩伦理在线视频 | 嫩模被强到高潮呻吟不断 | 日本老肥婆bbbwbbbwzr | 亚洲黄色精品视频 | 看毛片视频 | 精品视频成人 | 一本色道久久综合亚洲二区三区 | 草草视频在线观看 | 亚洲一区二区激情 | 女人下部全棵看视频 | 亚洲精品无 | 91香蕉视频污污 | 国产福利在线观看 | 日韩三级观看 | 乐播av一区二区三区 | 爱情岛论坛亚洲品质自拍视频 | 婷婷综合网 | 欧美一区二区在线观看视频 | 四虎视频国产精品免费入口 | 中文字幕 国产 | 色网在线免费观看 | 欧美综合亚洲图片综合区 | 天天看毛片 | 影音先锋国产 | 久久人人爽人人爽人人片 | 色超碰| www三级免费 | 91九色视频在线 | 免费a在线 | 美女久久久久久久久久 | 美女又爽又黄视频毛茸茸 | 男女无遮挡猛进猛出 | 国产精品美女www爽爽爽视频 | 国产精品美女久久久久久久 | 精品国产免费av | 加勒比不卡视频 | 国产做爰视频免费播放 | 日韩经典午夜福利发布 | 777欧美| 波多野结衣一区在线 | 岛国二区 | 国产一区二区波多野结衣 | 久久亚洲中文字幕无码 | 亚洲巨乳av | 性生交生活影碟片 | 中文在线免费观看 | 亚洲天堂首页 | av生活片 | 日本午夜精品理论片a级app发布 | 久久久久国产视频 | 金鱼妻日剧免费观看完整版全集 | 天天舔天天插 | 久久精品久久久精品美女 | 白洁av| 日韩在线视频中文字幕 | 国产成人无码一二三区视频 | 毛片aaaaaa | 天天做日日做 | 后入内射欧美99二区视频 | 大牛影视剧免费播放在线 | 黄色片大全 | 日韩午夜电影网 | 国产精品福利电影 | 玩弄丰满少妇xxxxx性多毛 | 国产美女一级视频 | 欧美一区久久 | 与亲女洗澡时伦了毛片 | 国产成人精品免费网站 | 麻豆免费在线观看 | 国产精品普通话 | 肌肉猛男裸体gay网站免费 | 国产美女无遮挡免费 | 五月天激情社区 | 亚洲欧美综合自拍 | 9l视频自拍九色9l视频 | 一区二区成人免费视频 | 超碰在线资源 | 成人欧美在线 | 色老头一区二区三区 | 婷婷丁香亚洲 | 男人天堂欧美 | 亚洲乱子伦 | 九九精品热 | 国产主播在线观看 | 青青操免费在线视频 | 美足av电影| 茄子视频懂你更多在线观看 | 久久视频精品在线 | 人妻丰满熟妇岳av无码区hd | 美女被到爽高潮视频 | 欧美69视频 | 成人手机视频 | 97avcc| 国产精品福利电影 | 人操人爽 |