一.数组
- 变量是程序运行时在内存中存储发生变化的容器。
- 变量可以存储单个数据,而数组可以存储多个变量,并且互不干扰,互不影响,和谐共处。
- 数组的特点:长度固定,类型相同。
二.数组的分类
一维数组,二维数组,多维数组,不规则数组
三.数组的应用
- 创建:
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));//2
int[] arr = { 1,4, 3, 2};
//使用LongLength
Console.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() | 将集合的大小设置为集合中元素的实际个数 |