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) 确定数组中是否存在与指定谓词所定义的条件相匹配的元素。
相关推荐
每次的天空30 分钟前
Android学习总结之算法篇四(字符串)
android·学习·算法
请来次降维打击!!!1 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
qystca1 小时前
蓝桥云客 刷题统计
算法·模拟
别NULL1 小时前
机试题——统计最少媒体包发送源个数
c++·算法·媒体
weisian1512 小时前
Java常用工具算法-3--加密算法2--非对称加密算法(RSA常用,ECC,DSA)
java·开发语言·算法
程序员黄同学3 小时前
贪心算法,其优缺点是什么?
算法·贪心算法
仙人掌_lz4 小时前
机器学习ML极简指南
人工智能·python·算法·机器学习·面试·强化学习
巷北夜未央4 小时前
Python每日一题(13)
开发语言·python·算法
独好紫罗兰5 小时前
洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构
开发语言·python·算法
对方正在长头发丿5 小时前
LETTERS(DFS)
c++·笔记·算法·深度优先·图论