C#数组和集合类详解

一.数组

  1. 变量是程序运行时在内存中存储发生变化的容器。
  2. 变量可以存储单个数据,而数组可以存储多个变量,并且互不干扰,互不影响,和谐共处。
  3. 数组的特点:长度固定,类型相同。

二.数组的分类
一维数组,二维数组,多维数组,不规则数组
三.数组的应用

  1. 创建:int[] vs = new int[5];
  2. 赋值:vs[0] = 5;
  3. 应用

四.声明数组

//定义一个已知长度的一维数组
int[] arr=new int[100];
//定义一个未知长度并使用对象初始化器直接赋值int
string person_Names =new string[]{"张三","李四","王五","刘涛"};

五.C#多维数组

  1. C#支持多维数组,多维数组又称为矩阵数组。
  2. 声明一个string变量的多维数组string [ , ] names
  3. 声明一个int类型的多维数组:int[,,] m
  4. 二维数组 :多维数组最简单的形式就是二维数组。一个二维数组在本质上可以被认为是一个带有X,Y的表格。int[,] a=new int[3,4]{{0,1,2,4}{5,6,7,8}};可以通过唯一索引(即行索引和列索引来访问数据)
  5. 使用循环来处理二维数组:
 //定义一个多维数组,二行四列
            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类

  1. Array类是C#中所有数组的基类,提供了各种用于数组的属性和方法。
  2. 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() 将集合的大小设置为集合中元素的实际个数
发布了21 篇原创文章 · 获赞 3 · 访问量 356

猜你喜欢

转载自blog.csdn.net/MrLsss/article/details/104050719