【C#学习记录】五、集合
2022/2/28 20:22:24
本文主要是介绍【C#学习记录】五、集合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 集合
- ArrayList集合
- 常用方法
- 添加元素
- 删除元素
- 排序
- 插入元素
- 查找元素
- 集合长度的问题
- count和capcity两个属性
- 常用方法
- Hashtable集合
- 基本概念
- var
- 常用方法
- 添加数据的方式
- 检查是否包含元素
- 移除元素
- 泛型集合
- 定义与赋值
- 集合和数组之间的转换
- 字典集合
- 用法
- ArrayList集合
集合
集合:很多类型的一个集合
数组:长度不可变,类型单一
集合的好处:长度可以任意改变,类型随便
泛型集合:长度可以任意改变,类型单一
ArrayList集合和Hashtable都在System.Collections
集合类型 | 特点 |
---|---|
数组 | 长度不可变,类型单一,类型存放进去类型不变 |
ArrayList | 长度可变,可以存放任意类型,类型存放进去转换为object类型 |
List<> | 长度可变,和ArrayList对应,但是只能存放单一类型,类型存放进去类型不变 |
Hashtable | 长度可变,键值对集合,可以存放任意类型,类型存放进去转换为object类型 |
Dictionary<> | 长度可变,键值对集合,和Dictionary对应,只能存放单一类型,类型存放进去类型不变 |
ArrayList集合
常用方法
添加元素
- list.Add()
我们将一个对象输出到控制台,默认情况下,打印的就是这个对象所在的类的命名空间。
using System.Collections; using 集合练习; Person p = new Person(); ArrayList list = new ArrayList(); list.Add(1); list.Add(3.14); list.Add(true); list.Add("张三"); list.Add(5000m); list.Add(new int[] { 1,2,3,4,5,6,7,8,9}); list.Add(p); list.Add(list); for (int i = 0; i < list.Count; i++) { Console.WriteLine(list[i]); } Console.ReadKey();
运行结果:
往list里面加任何类型的元素之后,都会转换成object类型,所以放进去类之后,我们想要得到类的内容,我们需要将object类强转成子类。
- list.AddRange()
往集合里面添加数组或者集合的时候,用list.AddRange();
list.AddRange(new int[]{1,2,3,4,5}); list.AddRange(list);
需要注意的是,添加集合或数组的时候,这个集合和数组不是作为一个元素添加进去的.数组和集合里的元素都将作为被添加集合的元素.
删除元素
-
list.Clear()
删除全部元素
-
list.Remove(item)
删除单个元素,写谁删谁
-
list.RemoveAt(index)
根据下标删除单个元素
-
list.RemoveRange(StartIndex,EndIndex)
根据下标去移除一定范围的元素
排序
-
list.Sort()
元素排序
-
list.Reverse()
元素反转
插入元素
-
list.Insert(index,item)
在指定的位置插入一个元素
-
list.InsetRange(index,item)
在指定的位置插入一个数组或集合
查找元素
-
list.Contains(item)
判断集合中是否有某个元素
集合长度的问题
count和capcity两个属性
-
list.Count
表示这个集合中实际包含的元素的个数
-
list.Capcity
表示这个集合中可以包含的元素的个数
每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用.
Hashtable集合
基本概念
Hashtable 键值对集合[注意:t为小写]
foreach 的效率远远高于for循环
键值对集合对象中,键必须是唯一的,值可以重复。
var
C#是一门强类型语言
var可以根据变量的赋值自动判断类型,但是尽量别用
常用方法
键值对集合对象[键] = 值;
using System.Collections; Hashtable ht = new Hashtable(); ht.Add(1, "张三"); ht.Add(2, true); ht.Add(3, '男'); ht.Add(false, "错误的"); //在键值对集合中,是根据键去找值的 foreach (var item in ht) { Console.WriteLine(item); //Console.WriteLine(ht[item]); } Console.WriteLine("=========================="); foreach (var item in ht.Keys) { Console.WriteLine(item); //Console.WriteLine(ht[item]); } Console.WriteLine("=========================="); foreach (var item in ht.Values) { Console.WriteLine(item); //Console.WriteLine(ht[item]); } Console.WriteLine("==========================");
注意:使用foreach遍历集合元素的时候,不能直接输出,例如上面的输出为:
直接遍历Hashtable输出的是元素对象的命名空间。
添加数据的方式
-
ht.Add(键,值)
这种方法不会检查有没有重复的键
-
ht[键] = 值;
这种方法首先会检查当前集合中有没有该键,如果没有,则新建一个,如果有,则覆盖。
检查是否包含元素
-
ht.Contains()
-
ht.ContainsKey()
-
ht.ContainsValue()
移除元素
- ht.Clear()
- ht.Remove()
泛型集合
定义与赋值
List<int> list = new List<>(); list.Add(1); list.AddRange(new int[] {2,3,4,5,6}); list.AddRange(list);
集合和数组之间的转换
int[] nums = list.ToArray(); List<int> list2 = nums.ToList(); string[] strs = listStr.ToArray(); List<string> listStr = strs.ToList();
字典集合
用法
//Dictionary<int, string> dic = new Dictionary<int, string>(); //dic.Add(1,"zhangsan"); //dic.Add(2,"lisi"); //dic.Add(3,"wangwu"); //Console.WriteLine(dic[1]); //dic[1] = "新来的"; //Console.WriteLine(dic[1]); //foreach (int item in dic.Keys) //{ // Console.WriteLine("{0}---{1}",item,dic[item]); //} //foreach (KeyValuePair<int,string> kv in dic) //{ // Console.WriteLine("{0}---{1}",kv.Key,kv.Value); //} //Console.ReadKey(); //将一个数组中的奇数放在一个集合中,再将偶数放在另一个集合中 //最终将两个集合合并为一个集合,并且奇数显示在左边,偶数显示在右边 using System.Collections; int[] nums = new int[]{ 0,2,5,6,9,87,46,1,489,56}; List<int> list1 = new List<int>(); List<int> list2 = new List<int>(); foreach (int item in nums) { if (item%2 == 0) { list2.Add(item); } else { list1.Add(item); } } list1.AddRange(list2); foreach (int item in list1) { Console.Write(item+" "); } Console.WriteLine(); //提醒用户输出一个字符串,通过foreach循环将用户输入的字符串赋值 //给一个字符数组 String strOfUsers = Console.ReadLine(); List<char> strsOfUsers = new List<char>(); foreach (var item in strOfUsers) { strsOfUsers.Add(item); } //统计 Welcome to China中每个字符出现的次数,不考虑大小写。 string strWelcome = "Welcome to China"; strWelcome = strWelcome.ToLower();//分析一下这一句,内存空间有没有更改? Dictionary<char, int> dicCount = new Dictionary<char,int>(); foreach (char item in strWelcome) { if (dicCount.Keys.Contains(item)) { dicCount[item] += 1; } else { dicCount.Add(item,1); } } Console.ReadKey();
这篇关于【C#学习记录】五、集合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#