C# 集合及练习题目

System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。

集合和数组是异同:

相同点:

  (1)两者都实现了IListICollectionIEnumerable接口

  (2)两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始

不同点:

  (1)ArrayList是集合,而Array是数组

  (2)ArrayList是具体类,Array是抽象类

  (3)数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList扩展了这一点,当实例化一个ArrayList实例时可以不指定集合元素数(有默认初始容量),当然你也可以指定初始容量

  (4)获取数组的元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性

  (5)数组可以有多维,而ArrayList只能是一维。

ArrayList的功能

      属性                           功能说明

     ①.Count        获取 ArrayList 中实际包含的元素数 

      方法                           功能说明

    ① .Add ()        将对象添加到 ArrayList 的结尾处

    ② .Clear()        从 ArrayList 中移除所有元素
    ③ .Clone()       创建 ArrayList 的浅表副本 
    ④ .Contains()      确定某元素是否在 ArrayList

    ⑤ .IndexOf()           已重载。返回 ArrayList 或它的一部分中某个值的第一个匹配项的从零开始的索引 
    ⑥ .Insert()       将元素插入 ArrayList 的指定索引处。 可在任意位置插入

    ⑦ .LastIndexOf()    已重载。 返回 ArrayList 或它的一部分中某个值的最后一个匹配项的从零开始的索引

    ⑧ .Remove()      从 ArrayList 中移除特定对象的第一个匹配项 
    ⑨ .RemoveAt()     移除 ArrayList 的指定索引处的元素 

    ⑩ .Sort()        已重载。 对 ArrayList 或它的一部分中的元素进行排序,升序

    ⑾.Reverse()              翻转整个集合

ArrayList al = new ArrayList();//初始化

al.Add(2);//添加任何类型

al.Add("2");
al.Add("hello");
al.Add(true);
al[3] = "你好";

al.Clear(); 移除所有元素
ArrayList al1 = new ArrayList();
al1 = (ArrayList)al.Clone();//克隆

Console.WriteLine(al1.Contains("2"));判断是否包含

Console.WriteLine(al1.IndexOf(11));获取第一次出现该元素的索引号

Console.WriteLine(al1.LastIndexOf(2));获取最后一次出现该元素的索引号

al.Insert(2,"Hello");插入某个索引位置某个元素

al.Remove("hello");移除某个第一次出现的元素

al.Sort();排序 ,升序

al.Reverse();翻转整个集合

练习:

            //输入班级人数,输入每个人的姓名、语数英成绩进入集合
            //求语文的总分,数学的平均分,
            //英语的最高分的人的姓名及所有科目的分数(冒泡排序)
            //0 姓名 4 8 12
            //1 语文成绩5 9 13
            //2 数学成绩6 10 14
            //3 英语成绩7 11 15 (数字为索引号)

            Console.Write("请输入班级人数:");
            int n = int.Parse(Console.ReadLine());
            double yu = 0;
            double shu = 0;
            ArrayList al = new ArrayList();
            for (int i = 0; i < n; i++)
            {
                Console.Write("请输入第{0}个人的姓名:", i + 1);
                al.Add(Console.ReadLine());
                Console.Write("请输入第{0}个人的语文成绩:", i + 1);
                al.Add(double.Parse(Console.ReadLine()));
                yu += double.Parse(al[al.Count - 1].ToString());
                Console.Write("请输入第{0}个人的数学成绩:", i + 1);
                al.Add(double.Parse(Console.ReadLine()));
                shu += double.Parse(al[al.Count - 1].ToString());
                Console.Write("请输入第{0}个人的英语成绩:", i + 1);
                al.Add(double.Parse(Console.ReadLine()));
            }
            Console.WriteLine("所有信息输入完毕,请按回车键继续!");
            Console.ReadLine();
            Console.WriteLine("语文的总分是:" + yu);
            Console.WriteLine("数学的平均分是:" + (shu / n));

            for (int i = 3; i < 4 * n - 1; i += 4)
            {
                for (int j = i; j < 4 * n - 4; j += 4)
                {
                    if (double.Parse(al[i].ToString()) < double.Parse(al[j + 4].ToString()))
                    {
                        //换姓名
                        object zhong = al[i - 3];
                        al[i - 3] = al[j + 1];
                        al[j + 1] = zhong;
                        //换语文
                        zhong = al[i - 2];
                        al[i - 2] = al[j + 2];
                        al[j + 2] = zhong;
                        //换数学
                        zhong = al[i - 1];
                        al[i - 1] = al[j + 3];
                        al[j + 3] = zhong;
                        //换英语
                        zhong = al[i];
                        al[i] = al[j + 4];
                        al[j + 4] = zhong;
                    }
                }
            }
            Console.WriteLine("英语最高分的学生是{0},英语分数是{1},语文分数是{2},数学分数{3}", al[0], al[3], al[1], al[2]);
            Console.ReadLine();

原文地址:https://www.cnblogs.com/hcx999/p/5715039.html