• [No0000EB]C# 数组(Array)


    数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。

    声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。

    所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。

    声明数组

    datatype[] arrayName;

    其中,

    • datatype 用于指定被存储在数组中的元素的类型。
    • [ ] 指定数组的秩(维度)。秩指定数组的大小。
    • arrayName 指定数组的名称。

    初始化数组

    声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。

    数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。

    赋值给数组

    double[] balance = new double[10];
    balance[0] = 4500.0;//可以通过使用索引号赋值给一个单独的数组元素;
    
    double[] balances = { 2340.0, 4523.69, 3421.0};//可以在声明数组的同时给数组赋值;
    
    int [] marks = new int[5]  { 99,  98, 92, 97, 95};//可以创建并初始化一个数;
    
    int [] marks2 = new int[]  { 99,  98, 92, 97, 95};//可以省略数组的大小;
    
    int[] score = marks;//可以赋值一个数组变量到另一个目标数组变量中。这样目标和源会指向相同的内存位置:

    访问数组元素

    元素是通过带索引的数组名称来访问的。这是通过把元素的索引放置在数组名称后的方括号中来实现的。

    C# 数组细节

    概念描述
    多维数组 C# 支持多维数组。多维数组最简单的形式是二维数组。
    交错数组 C# 支持交错数组,即数组的数组。
    传递数组给函数 您可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针。
    参数数组 这通常用于传递未知数量的参数给函数。
    Array 类 在 System 命名空间中定义,是所有数组的基类,并提供了各种用于数组的属性和方法。

    1.C# 多维数组

    C# 支持多维数组。多维数组又称为矩形数组。

    string [,] names;//声明一个 string 变量的二维数组
    int [ , , ] m;//声明一个 int 变量的三维数组

    二维数组

    多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。

    一个二维数组可以被认为是一个带有 x 行和 y 列的表格。

     

    Column0

    Column1

    Column2

    Column3

    Row0

    a[0][0]

    a[0][1]

    a[0][2]

    a[0][3]

    Row1

    a[1][0]

    a[1][1]

    a[1][2]

    a[1][3]

    Row2

    a[2][0]

    a[2][1]

    a[2][2]

    a[2][3]

    因此,数组中的每个元素是使用形式为 a[ i , j ] 的元素名称来标识的,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。

    初始化二维数组

    多维数组可以通过在括号内为每行指定值来进行初始化。

    int [,] a = new int [3,4] {
     {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
     {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
     {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
    };

    访问二维数组元素

    二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。

    2.C# 交错数组

    交错数组是数组的数组。声明一个数组不会在内存中创建数组。

    int[][] test = new int[5][];//创建交错数组
    for (int i = 0; i < test.Length; i++) 
    {
       test[i] = new int[4];
    }
    
    int[][] scores = new int[2][]{new int[]{92,93,94},new int[]{85,66,87,88}};//初始化一个交错数组

    scores 是一个由两个整型数组组成的数组 -- scores[0] 是一个带有 3 个整数的数组,scores[1] 是一个带有 4 个整数的数组。

    3.C# 传递数组给函数

    在 C# 中,可以传递数组作为函数的参数。通过指定不带索引的数组名称来给函数传递一个指向数组的指针。
    using System;
    
    namespace ArrayApplication
    {
       class MyArray
       {
          double getAverage(int[] arr, int size)
          {
             int i;
             double avg;
             int sum = 0;
    
             for (i = 0; i < size; ++i)
             {
                sum += arr[i];
             }
    
             avg = (double)sum / size;
             return avg;
          }
          static void Main(string[] args)
          {
             MyArray app = new MyArray();
             /* 一个带有 5 个元素的 int 数组 */
             int [] balance = new int[]{1000, 2, 3, 17, 50};
             double avg;
    
             /* 传递数组的指针作为参数 */
             avg = app.getAverage(balance, 5 ) ;
    
             /* 输出返回值 */
             Console.WriteLine( "平均值是: {0} ", avg );//平均值是: 214.4
             Console.ReadKey();
          }
       }
    }

    4.C# 参数数组

    当声明一个方法时,如果不能确定要传递给函数作为参数的参数数目,可以使用参数数组。参数数组通常用于传递未知数量的参数给函数。

    params 关键字

    在使用数组作为形参时,C# 提供了 params 关键字,使调用数组为形参的方法时,既可以传递数组实参,也可以只传递一组数组。

    public 返回类型 方法名称( params 类型名称[] 数组名称 )
    using System;
    
    namespace ArrayApplication
    {
       class ParamArray
       {
          public int AddElements(params int[] arr)
          {
             int sum = 0;
             foreach (int i in arr)
             {
                sum += i;
             }
             return sum;
          }
       }
          
       class TestClass
       {
          static void Main(string[] args)
          {
             ParamArray app = new ParamArray();
             int sum = app.AddElements(512, 720, 250, 567, 889);
             Console.WriteLine("总和是: {0}", sum);//总和是: 2938
             Console.ReadKey();
          }
       }
    }

    5.C# Array 类

    Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义。Array 类提供了各种用于数组的属性和方法。

    Array 类的属性

    序号

    属性

    描述

    1

    IsFixedSize

    获取一个值,该值指示数组是否带有固定大小。

    2

    IsReadOnly

    获取一个值,该值指示数组是否只读。

    3

    Length

    获取一个 32 位整数,该值表示所有维度的数组中的元素总数。

    4

    LongLength

    获取一个 64 位整数,该值表示所有维度的数组中的元素总数。

    5

    Rank

    获取数组的秩(维度)。

    Array 类的方法

    序号

    方法

    描述

    1

    Clear

    根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。

    2

    Copy(Array, Array, Int32)

    从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置。长度由一个 32 位整数指定。

    3

    CopyTo(Array, Int32)

    从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。索引由一个 32 位整数指定。

    4

    GetLength 

    获取一个 32 位整数,该值表示指定维度的数组中的元素总数。

    5

    GetLongLength

    获取一个 64 位整数,该值表示指定维度的数组中的元素总数。

    6

    GetLowerBound

    获取数组中指定维度的下界。

    7

    GetType

    获取当前实例的类型。从对象(Object)继承。

    8

    GetUpperBound

    获取数组中指定维度的上界。

    9

    GetValue(Int32)

    获取一维数组中指定位置的值。索引由一个 32 位整数指定。

    10

    IndexOf(Array, Object)

    搜索指定的对象,返回整个一维数组中第一次出现的索引。

    11

    Reverse(Array)

    逆转整个一维数组中元素的顺序。

    12

    SetValue(Object, Int32)

    给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。

    13

    Sort(Array)

    使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。

    14

    ToString

    返回一个表示当前对象的字符串。从对象(Object)继承。

    using System;
    namespace ArrayApplication
    {
        class MyArray
        {
            
            static void Main(string[] args)
            {
                int[] list = { 34, 72, 13, 44, 25, 30, 10 };
                int[] temp = list;
    
                Console.Write("原始数组: ");//原始数组: 34 72 13 44 25 30 10
                foreach (int i in list)
                {
                    Console.Write(i + " ");
                }
                Console.WriteLine();
               
                // 逆转数组
                Array.Reverse(temp);
                Console.Write("逆转数组: ");//逆转数组: 10 30 25 44 13 72 34
    
                foreach (int i in temp)
                {
                    Console.Write(i + " ");
                }
                Console.WriteLine();
                
                // 排序数组
                Array.Sort(list);
                Console.Write("排序数组: ");//排序数组: 10 13 25 30 34 44 72
    
                foreach (int i in list)
                {
                    Console.Write(i + " ");
                }
                Console.WriteLine();
    
               Console.ReadKey();
            }
        }
    }


     

  • 相关阅读:
    VS2019 .Net Core 3.1 Web 项目启用动态编译
    IntelliJ IDEA自动注释作者信息和日期时间
    Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.1.RELEASE from/to
    MS SQL Server数据批量插入优化详细
    更改VisualStudio默认创建类和接口不加public问题
    WIN10 报错 "此共享需要过时的SMB1协议,而此协议是不安全"的解决方法
    Delphi XE8,C++ Builder XE8,RAD Studio XE8 官方 ISO 文件下载,附激活工具
    PC 安装MAC
    InnoSetup能够实现“安装细节描述”界面吗?
    在Unicode版Inno Setup中使用ISSkin
  • 原文地址:https://www.cnblogs.com/Chary/p/No0000EB.html
Copyright © 2020-2023  润新知