入门学习 - 常用类合集(数组类,List,字典) 栈和队列

文章介绍了C#中常用的集合类,包括Array类的实例和静态方法如CopyTo、Sort、Reverse等,以及List<T>类的Add、Insert、Remove等方法。同时提到了Dictionary<TKey,TValue>类的键值对操作和Stack、Queue数据结构的基本用法。文章强调了各种方法在处理数组和列表时的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用集合类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z6TBC4iJ-1681116581092)(C:\Users\CoreDawg\AppData\Roaming\Typora\typora-user-images\image-20230410121503304.png)]

Array/数组类

方法

Array 类的方法

下表列出了 Array 类中一些最常用的方法:

序号方法 & 描述
1Clear 根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。
2Copy(Array, Array, Int32) 从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置。长度由一个 32 位整数指定。
3CopyTo(Array, Int32) 从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。索引由一个 32 位整数指定。
4GetLength 获取一个 32 位整数,该值表示指定维度的数组中的元素总数。
5GetLongLength 获取一个 64 位整数,该值表示指定维度的数组中的元素总数。
6GetLowerBound 获取数组中指定维度的下界。
7GetType 获取当前实例的类型。从对象(Object)继承。
8GetUpperBound 获取数组中指定维度的上界。
9GetValue(Int32) 获取一维数组中指定位置的值。索引由一个 32 位整数指定。
10IndexOf(Array, Object) 搜索指定的对象,返回整个一维数组中第一次出现的索引。
11Reverse(Array) 逆转整个一维数组中元素的顺序。
12SetValue(Object, Int32) 给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。
13Sort(Array) 使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。
14ToString 返回一个表示当前对象的字符串。从对象(Object)继承。
静态方法和实例方法的区分

说明:静态方法直接通过Array类调用

实例方法通过数组调用

            int[] list = { 34, 11, 55, 31, 841, 1, };
            list.CopyTo(list, 0);//Copy to就是一个实例方法,可以直接通过数组调用的
CopyTo方法 实例

使用示范

        static void Main(string[] args)
        {
            int[] list1 = { 34, 11, 55, 31, 841, 1, };
            int[] list2 = { 34, 1, 5, 3, 81, 1, };//两个数组长度保持一样,数据不同
            //把list1里面的数据复制到list2里面
            list1.CopyTo(list2, 0);//index索引参数指从几开始复制
            PrintValues(list1);
            PrintValues(list2);
            //两个输出都是
            /*        34      11      55      31      841     1
            34      11      55      31      841     1*/


        }

        //遍历数组方法
        public static void PrintValues(int[] myArr)
        {
            foreach (int i in myArr)
            {
                Console.Write("\t{0}", i);
            }
            Console.WriteLine();
        }

注意复制的时候保证list2的容量/长度是够的

Copy方法 静态

需要用类Array调用

            int[] list1 = { 34, 11, 55, 31, 841, 1, };
            int[] list2 = { 34, 1, 5, 3, 81, 1, };//两个数组长度保持一样,数据不同
            //把list1里面的数据复制到list2里面
            //list1.CopyTo(list2, 0);//index索引参数指从几开始复制

            Array.Copy(list1, list2, 2);
            /*         34      11      55      31      841     1   指定多少索引,就复制多少内容
                       34      11      5       3       81      1*/


            PrintValues(list1);
            PrintValues(list2);
GetLength方法 实例

获取长度

IndexOf方法 静态
            //索引方法示例
            int index = Array.IndexOf(list1, 1);
            Console.WriteLine(index);//5

查找特定参数的索引

Sort排序方法 静态

从小到大排序

            Array.Sort(list1);
            Array.Sort(list2);
            /*        1       11      31      34      55      841
        1       1       3       5       34      81*/
Reverse逆转方法 静态
            //逆转方法
            Array.Reverse(list1);

列表类List类的常用方法和属性

  1. 列表
  2. 队列
  3. 字典

列表

List

            //构造list的方式1
            List<string> mList = new List<string>();//空集合

            //另一种构造list的方式
            //先创建数组,再把数组作为参数传递给list
            string[] temArr = {"156302","84","961","gbuyfa","bdvsgfat","sdjas"};
            List<string> list2 = new List<string>(temArr);
常用方法演示
增加数据
            list2.Add("sda");

输出,需要输出遍历方法

        static void PrintValue(List<string> list)
        {
            foreach(string item in list)
            {
                Console.WriteLine(item + " ");
            }
            Console.WriteLine();
        }

输出

            list2.Add("sda");
            PrintValue(list2);
获取最大容量和获取当前数据个数
            Console.WriteLine(list2.Capacity);//12 最大容量
            Console.WriteLine(list2.Count);//7 数据的个数
插入方法
            list2.Insert(3, "sdaidha");
            PrintValue(list2);
删除方法
            //删除方法
            list2.Remove("84");
            PrintValue(list2);
按索引删除
            //按索引删除
            list2.RemoveAt(1);//删掉84
            PrintValue(list2);
范围删除
            //范围删除
            list2.RemoveRange(0, 3);
            PrintValue(list2);
定位方法
            //定位方法
            int a=list2.IndexOf("84");//定位序列位置
            Console.WriteLine(a);

如果数据不存在就会返回-1

方向查找定位

从后面向前查找,返回的也是索引

关键词是 LastIndexOf

说明:如果列表里有重复元素的话,那么这个方法就有用了

只判断存在的方法
            //判断是否存在
            bool isExit = list2.Contains("84");
            Console.WriteLine(isExit);//True

字典类Dictionary类的介绍和常用方法和属性

  1. Hashtable哈希表
  2. Dictionary<TKey,Value>字典

//区别在于字典必须指定泛型,其实差不多

键值对 Key-value

id - 身份信息

字典的创建
            //字典的创建
            Dictionary<int, string> studentDB = new Dictionary<int, string>();//创建了一个空字典
添加数据
            //添加数据
            studentDB.Add(1, "张三,男 20 天津 XXXX");
            studentDB.Add(1, "李四,女 20 天津 XXXX");
            studentDB.Add(1, "萌萌人,男 99 天津 XXXX");

注意键值不能相同

查找数据
           //查找数据
            string value = studentDB[1];
            Console.WriteLine(value);
判断是否存在
            //先判断存在的情况
            if (studentDB.ContainsKey(5))//小括号里的key是需要验证的key
            {
                string value1 = studentDB[1];
                Console.WriteLine(value);
            }
            else
            {
                Console.WriteLine("这个Key不存在");
            }
字典里的Key不能重复,但Value能
        studentDB.Add(1, "张三,男 20 天津 XXXX");
        studentDB.Add(2, "张三,男 20 天津 XXXX");
遍历数据,键值对遍历
            //遍历键值和数据
            foreach (KeyValuePair<int, string> kvp in studentDB)
            {
                Console.WriteLine(kvp.Key + " " + kvp.Value);
            }

            //只遍历键值
            Dictionary<int, string>.KeyCollection keycollection = studentDB.Keys;
            foreach(int key in keycollection)
            {
                Console.WriteLine(key);
            }

只遍历所有的值

            //只遍历值
            Dictionary<int, string>.ValueCollection valuecollection = studentDB.Values;//也是先定义一个集合
            foreach(string value in valuecollection)
            {
                Console.WriteLine(value);
            }
删除数据
            //删除数据
            studentDB.Remove(2);

            Dictionary<int, string>.ValueCollection valuecollection = studentDB.Values;//也是先定义一个集合
            foreach (string value in valuecollection)
            {
                Console.WriteLine(value);
            }

用字典存储游戏道具

先创建一个游戏道具类
 class item
        {
            public int Id { get; set; }
            public string Name { get; set; }//治疗药水,魔法药水,敏捷药水
            public int Hp { get; set; }
            public int Mp { get; set; }
            public int Speed { get; set; }

            //道具的构造方法
            public item(int id,string name,int Hp,int Mp,int Speed)
            {
                this.Id = id;
                this.Name = name;
                this.Hp = Hp;
                this.Mp = Mp;
                this.Speed = Speed;
            }

        }
使用字典

先创建字典,在创建物品

            Dictionary<int, item> ItemDict = new Dictionary<int, item>();
            ItemDict.Add(1001, new item(1001,"治疗药水", 100, 0, 0));
            ItemDict.Add(1002, new item(1002,"魔法药水", 0, 100, 0));
            ItemDict.Add(1002, new item(1002,"敏捷药水", 0, 0, 100));

什么是栈Stack和队列

创建栈
            //创建栈
            Stack<int> ts = new Stack<int>();
像栈里存储数据 入栈 Push
            //向栈里存储数据 入栈
            ts.Push(1);
            ts.Push(2);
            ts.Push(3);
            ts.Push(4);

通过遍历栈看数据情况

            //遍历
            foreach(int i in ts)
            {
                Console.WriteLine(i);//4 3 2 1
            }

输出的数据是反序的,因为对栈来说,会从栈顶来取,而最后放入的数据就在栈顶

取数据 出栈 Peek和Pop
Peek

            int res =ts.Peek();//获取栈顶的数据
            Console.WriteLine(res);//4

Peek即使多次调用,也只能获得栈顶的数据

Pop
            //出栈
            int res2 = ts.Pop();//从上往下一次拿出一个数据
            int res3 = ts.Pop();
            int res4 = ts.Pop();
            //int res5=ts.Pop();

            Console.WriteLine(res2);//4
            Console.WriteLine(res3);//3
            Console.WriteLine(res4);//2
            //Console.WriteLine(res5);//1

            Console.WriteLine();//换行

            //输出剩余的数据
            foreach (int i in ts)
            {
                Console.WriteLine(i);
            }
            /*4   输出结果
              3
              2

              1
             * 
             */

区别:Peek不会移除栈的数据,Pop会移除栈的数据

清空Clear
            //清空
            ts.Clear();
            foreach(int i in ts)
            {
                Console.WriteLine(i);//Clear 之后,输出为空,里面就没数据了
            }
Contains是否包含
            //contains,判断是否包含数据
            Console.WriteLine(ts.Contains(4));//True
            Console.WriteLine(ts.Contains(99));//False
Count取得数据个数
            //Count取得数据个数
            Console.WriteLine(ts.Count);//4

队列

基础创建队列
增加数据Enqueue
                    //创建队列
            Queue<int> q = new Queue<int>();
            //添加数据
            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);
            q.Enqueue(4);
            //遍历
            foreach(int i in q)
            {
                Console.WriteLine(i);//1 2 3 4
            }

队列是从队头遍历到队尾的

Clear方法

没啥好说的,就也是清楚数据

            q.Clear();
            //遍历
            foreach(int i in q)
            {
                Console.WriteLine(i);//清空之后再遍历的结果是啥都没有
            }
取数据 出队
Peek
            //Peek
            int a = q.Peek();//只能看到队头,就算重复多次得到的结果也是队头
            int b = q.Peek();
            Console.WriteLine(a);
            Console.WriteLine(b);
Dequeue出队
            //出队
            int a=q.Dequeue();
            int b=q.Dequeue();
            int c=q.Dequeue();

            Console.WriteLine(a);//1
            Console.WriteLine(b);//2
            Console.WriteLine(c);//3

            Console.WriteLine();//换行

            //查看队伍剩余的数据
            foreach(int i in q)
            {
                Console.WriteLine(i);//4
            }
判断是否包含Contains
            //包含
            Console.WriteLine(q.Contains(5));//False
            Console.WriteLine(q.Contains(3));//True
Count取得所有数据个数
            Console.WriteLine(q.Count);//4
int c=q.Dequeue();

        Console.WriteLine(a);//1
        Console.WriteLine(b);//2
        Console.WriteLine(c);//3

        Console.WriteLine();//换行

        //查看队伍剩余的数据
        foreach(int i in q)
        {
            Console.WriteLine(i);//4
        }

#### 判断是否包含Contains

~~~C#
            //包含
            Console.WriteLine(q.Contains(5));//False
            Console.WriteLine(q.Contains(3));//True
Count取得所有数据个数
            Console.WriteLine(q.Count);//4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值