C#数组和集合类详解
一.数组
- 变量是程序运行时在内存中存储发生变化的容器。
- 变量可以存储单个数据,而数组可以存储多个变量,并且互不干扰,互不影响,和谐共处。
- 数组的特点:长度固定,类型相同。
二.数组的分类
一维数组,二维数组,多维数组,不规则数组
三.数组的应用
- 创建:
int[] vs = new int[5];
- 赋值:
vs[0] = 5;
- 应用
四.声明数组
//定义一个已知长度的一维数组
int[] arr=new int[100];
//定义一个未知长度并使用对象初始化器直接赋值int
string person_Names =new string[]{"张三","李四","王五","刘涛"};
五.C#多维数组
- C#支持多维数组,多维数组又称为矩阵数组。
- 声明一个string变量的多维数组
string [ , ] names
- 声明一个int类型的多维数组:
int[,,] m
- 二维数组 :多维数组最简单的形式就是二维数组。一个二维数组在本质上可以被认为是一个带有X,Y的表格。
int[,] a=new int[3,4]{{0,1,2,4}{5,6,7,8}};
可以通过唯一索引(即行索引和列索引来访问数据) - 使用循环来处理二维数组:
//定义一个多维数组,二行四列int[,] vs = new int[2, 4] { { 0,1,2,3},{4,5,6,7} };//输出二维数组中每个元素的值for (int i = 0; i < 2; i++){for (int j = 0; j < 4; j++){Console.WriteLine(vs[i,j]);}}Console.WriteLine(vs.GetLength(0));//2
C#的Array类
- Array类是C#中所有数组的基类,提供了各种用于数组的属性和方法。
- Array的属性:
IsFixedSize:获取一个值,指示该数组是否带有固定大小。
IsReadOnly:获取一个值,指示该数组是否只读。
Length:获取一个32位整数,该值表示数组的中的元素总数
LongLength:获取一个64位整数,该值表示数组中的元素整数。
Rank:获取数组的秩(维度(维数1 2 ))。
方法:
Clear:(不是清除)根据元素类型,设置数组中某个范围为0,或false或null.
//使用Array的Clear函数Array.Clear(arr, 0, 2);for (int i = 0; i < arr.Length; i++){Console.WriteLine(arr[i]);//0 0 3 4 }
Copy(Array1,Array2,Int32):从源数组的第一个元素开始复制某个范围(元素数量)的元素到另一个数组的第一个元素开始位置。Buffer.BlockCopy()复制指定字节到目标数组(指定字节偏移量)
CopyTo(Array,Int32):从当前一维数组复制所有元素到指定的一维数组的指定索引位置。
GetType:获取当前实例的类型。从对象(Object)继承;
GetValue(Int32): 获取一维数组中指定位置的值。
IndexOf(Array,Object): 搜索指定的对象,返回整个数组中第一次出现该元素的索引位置。
Reverse(Array): 逆转整个一维数组中元素的顺序
SetValue(Object,Int32):给一维数组中的某个索引位置设置Value值。
Sort(Array):使用数组的每个元素的IcomOarable实现来排序整个一维数组中的元素;
ToString:返回一个表示当前对象的字符串。从对象(Object)继承
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp2
{class Program{static void Main(string[] args){//定义一个多维数组,二行四列//int[,] vs = new int[2, 4] { { 0,1,2,3},{4,5,6,7} };输出二维数组中每个元素的值//for (int i = 0; i < 2; i++)//{// for (int j = 0; j < 4; j++)// {// Console.WriteLine(vs[i,j]);// }//}//Console.WriteLine(vs.GetLength(0));//2int[] arr = { 1,4, 3, 2};//使用LongLengthConsole.WriteLine(arr.LongLength);//4//使用Rank获取数组维数//Console.WriteLine(vs.Rank);//使用Clear函数//Array.Clear(arr, 0, 2);//for (int i = 0; i < arr.Length; i++)//{// Console.WriteLine(arr[i]);//0 0 3 4 //}//Buffer.BlockCopy()//Array.Copy(arr, arr, 5);//排序//Array.Sort(arr);//升序Array.Sort<int>(arr);Array.Reverse(arr);//反转for (int i = 0; i < arr.Length; i++){Console.WriteLine(arr[i]);//4321 1234}Console.ReadKey();}}
}
C#集合(Collection)
1.集合(Collection)和数组比较类似,都用于存放一组值,但集合中提供特定的方法能直接操作集合中的数据,并提供了不同的集合类来实现特定的功能。
2.集合简单来说就是数组的升级版,它可以动态的对集合长度(也就是集合内最大元素的个数)进行定义和维护。
3.集合就是一种动态的可变的数组,可以存放不同类型的多个元素。
4.所有集合类与集合相关的接口命名空间都是System.Collection,该命名空间提供常用接口如见下表。
IEnumerable | 用于迭代集合中的项,该接口是一种声明式的接口 |
IEnumerator | 用于迭代集合中的项,该接口是一种实现式的接口 |
ICollection | .NET 提供的标准集合接口,所有的集合类都会直接或间接地实现这个接口 |
IList | 继承自 IEnumerable 和 ICollection 接口,用于提供集合的项列表,并允许访问、查找集合中的项 |
IDictionary | 继承自 IEnumerable 和 ICollection 接口,与 IList 接口提供的功能类似,但集 合中的项是以键值对的形式存取的 |
DictionaryEnumeratoIr | 用于迭代 IDictionary 接口类型的集合 |
针对上表的接口有一些常用的接口实现类,如小表显示:
类名称 | 实现接口 | 特点 |
ArrayList | ICollection、IList、IEnumerable、ICloneable | 集合中元素的个数是可变的,提供添加、删除等方法 |
Queue | ICollection、IEnumerable、ICloneable | 集合实现了先进先出的机制,即元素将在集合的尾部添加、在集合的头部移除 |
Stack | ICollection、IEnumerable、ICloneable | 集合实现了先进后出的机制,即元素将在集合的尾部添加、在集合的尾部移除 |
Hashtable | IDictionary、ICollection、IEnumerable、 ICloneable 等接口 | 集合中的元素是以键值对的形式存放的,是 DictionaryEntry 类型的 |
SortedList | IDictionary、ICollection、IEnumerable、 ICloneable 等接口 | 与 Hashtable 集合类似,集合中的元素以键值对的形式存放,不同的是该集合会按照 key 值自动对集合中的元素排序 |
最常用的集合类简介:
C# ArrayList类:动态数组
ArrayList类是最常用的集合类,与数组的操作方法类似。
ArrayList代表了可被单独索引的对象的有序集合,他基本上可以代替一个数组(使用索引进行操作)
但是,与数组不同的是,ArrayList 可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。同时ArrayList也允许在列表中进行动态内存分配,增加,搜索,排序各项
创建ArrayList类的对象:
ArrayList listl=new ArrayList();//集合容量为默认容量
ArrayList list2=new ArrayList(listl);//根据集合创建ArrayList对象
ArrayList list3=new ArrayList(20);//创建ArrayList对象实例并制定其初始容量。
属性或方法 | 作用 |
---|---|
int Add(object value) | 向集合中添加 object 类型的元素,返回元素在集合中的下标 |
void AddRange(ICollection c) | 向集合中添加另一个集合 c |
Capacity | 属性,用于获取或设置集合中可以包含的元素个数 |
void Clear() | 从集合中移除所有元素 |
bool Contains(object item) | 判断集合中是否含有 item 元素,若含有该元素则返回 True, 否则返回 False |
void CopyTo(Array array) | 从目标数组 array 的第 0 个位置开始,将整个集合中的元素复制到类型兼容的数组 array 中 |
void CopyTo(Array array,int arraylndex) | 从目标数组 array 的指定索引 arraylndex 处,将整个集合中的元素赋值到类型兼容的数组 array 中 |
void CopyTo(int index,Array array,int arrayIndex,int count) | 从目标数组 array 的指定索引 arrayindex 处,将集合中从指定索引 index 开始的 count 个元素复制到类型兼容的数组 array 中 |
Count | 属性,用于获取集合中实际含有的元素个数 |
int IndexOf(object value) | 返回 value 值在集合中第一次出现的位置 |
int IndexOf(object value,int startIndex) | 返回 value 值在集合的 startindex 位置开始第一次出现的位置 |
int IndexOf(object value,int startIndex,int count) | 返回 value 值在集合的 startindex 位置开始 count 个元素中第一次出现的位置 |
int LastIndexOf(object value) | 返回 value 值在集合中最后一次出现的位置 |
int LastIndexOf(object value,int startIndex) | 返回 value 值在集合的 startindex 位置开始最后一次出现的位置 |
int LastIndexOf(object value,int startIndex,int count) | 入元素 value值在集合的 startindex 位置开始 count 个元素中最后一次出现的位置 |
void Insert(int index,object value) | 返回 value 向集合中的指定索引 index 处插 |
void InsertRange(int index,ICollection c) | 向集合中的指定索引 index 处插入一个集合 |
void Remove(object obj) | 将指定兀素 obj 从集合中移除 |
void RemoveAt(int index) | 移除集合中指定位置 index 处的元素 |
void RemoveRange(int index,int count) | 移除集合中从指定位置 index 处的 count 个元素 |
void Reverse() | 将集合中的元素顺序反转 |
void Reverse(int index,int count) | 将集合中从指定位置 index 处的 count 个元素反转 |
void Sort() | 将集合中的元素排序,默认从小到大排序 |
void Sort(IComparer comparer) | 将集合中的元素按照比较器 comparer 的方式排序 |
void Sort(int index,int count,IComparer comparer) | 将集合中的元素从指定位置 index 处的 count 个元素按照比较器 comparer 的方式排序 |
void TrimToSize() | 将集合的大小设置为集合中元素的实际个数 |
C#数组和集合类详解相关推荐
- Java集合排序及java集合类详解
Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...
- ES5和ES6数组遍历方法详解
ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1.原始的for循环语句 2.Array.prototype.forEach数组对象内置方法 3.Array.prototype. ...
- 旋转排序数组系列题详解
旋转排序数组系列题详解 文章目录 旋转排序数组系列题详解 一.问题描述:旋转数组的最小数字 二.分析:二分查找 三.代码 四.问题描述:寻找旋转排序数组中的最小值 五.分析:二分搜索 六.代码 七.问 ...
- java唯一并且有序集合_成都汇智动力-Java集合类详解
原标题:成都汇智动力-Java集合类详解 java中集合类主要有两大分支: (1)Collection (2)Map Collection接口 一个Collection代表一组Object,即Coll ...
- c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别
详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...
- C语言 字符数组 和 字符串 详解
C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ...
- pythonprint字节按照16进制输出_对python以16进制打印字节数组的方法详解
对python以16进制打印字节数组的方法详解 一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印 ...
- linux jq 遍历数组,jquery 遍历数组 each 方法详解
JQuery拿取对象的方式 $('#id') :通过元素的id $('tagName') : 通过元素的标签名 $('tagName tagName') : 通过元素的标签名,eg: $('ul li ...
- java生成字符串数组_Java 生成随机字符串数组的实例详解
Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...
- C语言数组之间赋值详解
数组之间的赋值,C语言数组之间赋值详解 (biancheng.net)
最新文章
- 利用gevent实现异步执行任务
- UVA11817 Tunnelling the Earth(计算几何、经纬度转空间坐标、球面距离)
- HDU3496-Watch The Movie
- 统一沟通-技巧-9-Lync 2010-Outlook 2010-自动配置-2-普通人员
- wordpress使用二级域名绑定七牛云存储做图片存储站
- 1028. 人口普查(20)
- 【算法设计与分析】07 算法的数学基础
- CV算法助理 | 华为外包招聘
- jsp+左间距_DIV间距设置
- POSIX 信号量和互斥锁
- .html与.htm为网页后缀的区别
- 微信小程序开发04-打造自己的UI库
- discuz开发经验discuz x3 怎么在帖子列表显示论坛板块图标
- EdrawMax Crack,跨平台图表软件
- abaqus单位问题
- CAN FD 总线协议深度解析-简单易懂协议详解
- iOS 高德地图实现大头针展示,分级大头针,自定制大头针,在地图上画线,线和点共存,路线规划(驾车路线规划),路线导航,等一些常见的使用场景
- 10部关于数学的顶级纪录片
- uniapp的打包h5页面收不到验证码接口
- 视频播放JZVideoPlayer
热门文章
- web开源FlowPlayer视频播放器
- 如何调整html中音乐播放器的大小,请教音乐播放器大小如何调整?
- python画七彩圆圈_【彩虹手工】 创意彩虹帽子,吊饰,绘画,玩具,给孩子们一个七彩梦吧!...
- 计算机维护费可以跨年吗,税控技术维护费是否可以跨年抵扣?
- Python美女图片爬虫实战
- oracle数据库sql语句插入时间信息
- pywinauto实现微信消息自动发送
- 【学习资源分享】在线学习平台推荐
- access通过身份证号提取性别_身份证号码男女函数(excel中关于18位身份证号的提取性别公式)...
- Python 识别图片文字( Tesseract 安装使用 )