C#上位机--数组

引言

在 C# 上位机开发过程中,数组是一种非常重要的数据结构,它可以用来存储和管理一组相同类型的数据。本文将详细介绍一维数组、多维数组以及数组的数组(交错数组)的使用方法,并通过程序示例进行演示,同时还会列出数组支持的主要属性和方法。

一、一维数组

一维数组是最简单的数组形式,它可以看作是一个线性的数据集合。在 C# 中,声明和初始化一维数组的方式如下:

cs 复制代码
  static void Main()
        {// 声明并初始化一个包含 5 个整数的一维数组
            int[] numbers = { 1, 2, 3, 4, 5 };

            // 也可以先声明数组,再逐个赋值
            string[] names = new string[3];
            names[0] = "Alice";
            names[1] = "Bob";
            names[2] = "Charlie";

            // 遍历数组
            for (int i = 0; i < numbers.Length; i++)
            {
                Console.WriteLine(numbers[i]);
            }

            foreach (string name in names)
            {
                Console.WriteLine(name);
                Console.ReadKey();
            }
        }

在上述代码中,我们首先创建了一个整数类型的一维数组 numbers 并初始化了它的元素。然后,我们创建了一个字符串类型的数组 names,先声明了数组的大小,再逐个赋值。最后,我们使用 for 循环和 foreach 循环遍历了这两个数组。

运行结果:

二、多维数组

多维数组可以用来存储具有多个维度的数据,比如矩阵、表格等。常见的多维数组是二维数组,它可以看作是一个由行和列组成的表格。

cs 复制代码
 static void Main()
        {/// 声明并初始化一个 3 行 4 列的二维整数数组
            int[,] matrix = {
    { 1, 2, 3, 4 },
    { 5, 6, 7, 8 },
    { 9, 10, 11, 12 }
};

            // 遍历二维数组
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write(matrix[i, j] + " ");
                }
                Console.WriteLine();
                Console.ReadKey();
            }
        }

在这个示例中,我们创建了一个二维整数数组 matrix,并通过嵌套的 for 循环遍历了它的每一个元素。GetLength(0) 方法返回数组的行数,GetLength(1) 方法返回数组的列数。

运行结果:

三、数组的数组(交错数组)

数组的数组,也称为交错数组,它是一个数组,其中的每个元素又是一个数组。交错数组的每个子数组的长度可以不同。

cs 复制代码
 class Program
    {
        static void Main()
        {// 声明并初始化一个交错数组
            int[][] jaggedArray = {
    new int[] { 1, 2, 3 },
    new int[] { 4, 5 },
    new int[] { 6, 7, 8, 9 }
};

            // 遍历交错数组
            for (int i = 0; i < jaggedArray.Length; i++)
            {
                for (int j = 0; j < jaggedArray[i].Length; j++)
                {
                    Console.Write(jaggedArray[i][j] + " ");
                }
                Console.WriteLine();
                Console.ReadKey();
            }
        }
    }

在上述代码中,我们创建了一个交错数组 jaggedArray,它包含了三个长度不同的子数组。通过嵌套的 for 循环,我们遍历了交错数组的每一个元素。

四、数组支持的主要属性和方法

下面是一个表格,列出了 C# 中数组支持的一些主要属性和方法:

属性

属性名 描述
Length 获取数组所有维度的元素总数。对于一维数组,它就是数组中元素的个数;对于多维数组,是所有维度元素数的乘积。
LongLength 获取一个 64 位整数,表示数组所有维度中的元素总数。适用于元素数量可能超过 int.MaxValue 的情况。
Rank 获取数组的维度数。例如,一维数组的 Rank 为 1,二维数组的 Rank 为 2。
IsFixedSize 指示数组是否具有固定大小,数组一旦创建,大小不可改变,所以该属性始终返回 true
IsReadOnly 指示数组是否为只读,数组可以修改元素值,所以该属性始终返回 false
IsSynchronized 指示是否同步对数组的访问(即线程安全),数组默认不是线程安全的,此属性始终返回 false
SyncRoot 获取可用于同步对数组访问的对象,可用于实现多线程同步操作。

方法

基本操作方法
方法名 描述
Clear(Array array, int index, int length) 将数组中从指定索引开始的指定数量的元素设置为其类型的默认值。
Copy(Array sourceArray, Array destinationArray, int length) 将一个数组中的一系列元素复制到另一个数组中。有多个重载版本,可指定源数组起始索引、目标数组起始索引等。
CopyTo(Array array, int index) 将当前一维数组的所有元素复制到指定的一维数组中,从指定索引位置开始存放。
GetLength(int dimension) 获取数组指定维度的元素数量。对于多维数组,可通过指定不同的维度参数来获取相应维度的长度。
GetLongLength(int dimension) 获取数组指定维度的元素数量,以 64 位整数形式返回,用于处理可能非常大的数组。
GetLowerBound(int dimension) 获取数组指定维度的下限索引,通常为 0,但在某些特殊情况下(如自定义下限的数组)可能不同。
GetUpperBound(int dimension) 获取数组指定维度的上限索引,等于该维度的元素数量减 1。
GetValue(params int[] indices) 获取数组中指定位置的元素值,对于多维数组,需要传入多个索引参数。
SetValue(object value, params int[] indices) 将数组中指定位置的元素设置为指定的值,对于多维数组,同样需要传入多个索引参数。
查找方法
方法名 描述
IndexOf(Array array, object value) 在一维数组中搜索指定的值,并返回其第一次出现的索引;如果未找到,则返回 -1。有多个重载版本,可指定搜索范围。
LastIndexOf(Array array, object value) 在一维数组中搜索指定的值,并返回其最后一次出现的索引;如果未找到,则返回 -1。也有多个重载版本支持指定搜索范围。
Find<T>(T[] array, Predicate<T> match) 在数组中搜索与指定谓词所定义的条件相匹配的第一个元素。
FindLast<T>(T[] array, Predicate<T> match) 在数组中搜索与指定谓词所定义的条件相匹配的最后一个元素。
FindAll<T>(T[] array, Predicate<T> match) 检索数组中与指定谓词所定义的条件相匹配的所有元素。
FindIndex<T>(T[] array, Predicate<T> match) 搜索与指定谓词所定义的条件相匹配的元素,并返回整个数组中第一个匹配元素的索引。
FindLastIndex<T>(T[] array, Predicate<T> match) 搜索与指定谓词所定义的条件相匹配的元素,并返回整个数组中最后一个匹配元素的索引。
排序和比较方法
方法名 描述
Sort(Array array) 对一维数组中的元素进行排序,使用元素类型的默认比较器。有多个重载版本,可指定排序范围、自定义比较器等。
Sort<T>(T[] array, Comparison<T> comparison) 使用指定的比较方法对一维泛型数组中的元素进行排序。
Reverse(Array array) 反转一维数组中元素的顺序。也有重载版本可指定反转的范围。
BinarySearch(Array array, object value) 使用二分搜索算法在已排序的一维数组中查找指定元素,返回该元素的索引;如果未找到,则返回一个负数。有多个重载版本,可指定搜索范围、自定义比较器等。
Compare(Array array1, Array array2) 比较两个数组的元素,判断它们是否相等。
其他方法
方法名 描述
ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput, TOutput> converter) 将一种类型的数组元素转换为另一种类型,并返回包含转换后元素的新数组。
TrueForAll<T>(T[] array, Predicate<T> match) 确定数组中的每个元素是否都与指定的谓词所定义的条件相匹配。
Exists<T>(T[] array, Predicate<T> match) 确定数组中是否存在与指定谓词所定义的条件相匹配的元素。
相关推荐
那个村的李富贵7 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿7 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
琹箐7 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia18 小时前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了8 小时前
数据结构之树(Java实现)
java·算法
算法备案代理8 小时前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.8 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
野犬寒鸦10 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总10 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法
rainbow688910 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法