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

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

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

声明数组

datatype[] arrayName;

其中,

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

初始化数组

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

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

赋值给数组

double[] balance = new double[];
balance[] = 4500.0;//可以通过使用索引号赋值给一个单独的数组元素; double[] balances = { 2340.0, 4523.69, 3421.0};//可以在声明数组的同时给数组赋值; int [] marks = new int[] { , , , , };//可以创建并初始化一个数; int [] marks2 = new int[] { , , , , };//可以省略数组的大小; 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 [,] {
{, , , } , /* 初始化索引号为 0 的行 */
{, , , } , /* 初始化索引号为 1 的行 */
{, , , } /* 初始化索引号为 2 的行 */
};

访问二维数组元素

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

2.C# 交错数组

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

int[][] test = new int[][];//创建交错数组
for (int i = ; i < test.Length; i++)
{
test[i] = new int[];
} int[][] scores = new int[][]{new int[]{,,},new int[]{,,,}};//初始化一个交错数组

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 = ; for (i = ; 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[]{, , , , };
double avg; /* 传递数组的指针作为参数 */
avg = app.getAverage(balance, ) ; /* 输出返回值 */
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 = ;
foreach (int i in arr)
{
sum += i;
}
return sum;
}
} class TestClass
{
static void Main(string[] args)
{
ParamArray app = new ParamArray();
int sum = app.AddElements(, , , , );
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 = { , , , , , , };
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();
}
}
}

[No0000EB]C# 数组(Array)的更多相关文章

  1. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别

    ArrayList和Vector的区别ArrayList与Vector主要从二方面来说.  一.同步性:   Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...

  2. go 数组(array)、切片(slice)、map、结构体(struct)

    一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...

  3. javascript类型系统——数组array

    × 目录 [1]创建 [2]本质 [3]稀疏[4]长度[5]遍历[6]类数组 前面的话 除了对象之外,数组Array类型可能是javascript中最常用的类型了.而且,javascript中的数组与 ...

  4. swift基本用法-数组array

    数组简单用法 //------------------------------------------------------------------------------ // 1. 数组定义 / ...

  5. C#中数组Array、ArrayList、泛型List<T>的比较

    在C#中数组Array,ArrayList,泛型List都能够存储一组对象,但是在开发中根本不知道用哪个性能最高,下面我们慢慢分析分析. 一.数组Array 数组是一个存储相同类型元素的固定大小的顺序 ...

  6. Javascript基础系列之(四)数据类型 (数组 array)

    字符串,数值,布尔值都属于离散值(scalar),如果某个变量是离散的,那么任何时候它只有一个值. 如果想使用变量存储一组值,就需要使用数组(array). 数组是由多个名称相同的树值构成的集合,集合 ...

  7. AS3 - 数组Array的几个常用方法(附样例)

    AS3 - 数组Array的几个常用方法(附样例) 2015-03-30 10:39发布:hangge浏览:241   Flex/Flash开发中,经常会使用到数组,下面总结了一些数组的常用方法. 1 ...

  8. Linux数组array基础

    Linux数组array基础[${a[*]}和$a的区别] Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... valuen) 此时下标从0开始 (2) name[i ...

  9. 学习Swift -- 数组(Array) - 持续更新

    集合类型--数组 Array是Swift中的一种集合类型:数组,数组是使用有序列表储存同一类型的多个值,与OC的NSArray的最大不同是,Swift的数组是值类型,OC的数组是引用类型 声明数组的方 ...

随机推荐

  1. 微软自然语言理解平台LUIS:从零开始,帮你开发智能音箱

    今年微软开发者大会Build 2017上展示了一款Invoke智能音箱,受到了媒体和大众的广泛关注.近两年,不少大公司纷纷涉足该领域,使得智能音箱逐渐成为一款热门的人工智能家用电器.智能音箱的兴起也改 ...

  2. Windows 8系统默认开启的.Net Framework版本是4.0,而部分用户可能需要使用到3.5或以下版本,简单添加方法

    从网络途径下载的.Net Framework3.5是无法直接在Windows 8系统上安装的,我们可以通过Windows 8的添加功能来实现 1.打开控制面板,点击”启用或关闭Windows 功能“ ...

  3. 多网卡环境下Eureka服务注册IP选择问题

    一.问题场景 服务器上分别配置了eth0, eth1和eth2三块网卡,只有eth1的地址可供其它机器访问,eth0和eth2的 IP 无效.在这种情况下,服务注册时Eureka Client会自动选 ...

  4. Spark 核心篇-SparkEnv

    本章内容: 1.功能概述 SparkEnv是Spark的执行环境对象,其中包括与众多Executor执行相关的对象.Spark 对任务的计算都依托于 Executor 的能力,所有的 Executor ...

  5. 利用OCR识别扫描的jpg、tif文件的文字

    第一步:下载老马哥的从 office和sharepoint 提取出来的注册表和dll  http://115.com/file/dpa4qrt2 或者直接安装office和sharepoint2007 ...

  6. PHP更改自动加载的顺序

    composer的锅 自从PHPer们用上了composer后,对于传统的加载方式倒是不会用了,可谓是"收之东隅,失之桑榆". 下面说一下怎么改变加载顺序来覆写Laravel中的h ...

  7. [转]《RabbitMQ官方指南》安装指南

    原文链接   翻译:xiezc 目录(其中的文章后续翻译): Windows下安装 Debian / Ubuntu下安装 基于RPM的Linux下安装 Mac OS X下安装 Homebrew安装 W ...

  8. ssh免密码登录配置方法

    每次输密码很麻烦,免密登录设置方法按照<ssh免密码登录配置方法>即可,简单来说: 1.终端上执行ssh-keygen -t rsa,生成密钥对(存放在/home/usera/.ssh). ...

  9. 什么是对象:EVERYTHING IS OBJECT(万物皆对象)

      所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.

  10. 记一个神奇的WAS问题:sibuswsgw-sibuswsgw_console.jar invalid LOC header (bad signature) 分类: WebSphere 2015-08-06 23:21 9人阅读 评论(0) 收藏

    今天晚上,出现了一个神奇的WAS问题,详细问题异常信息如下: [15-8-6 22:13:29:146 CST] 00000013 ApplicationMg A WSVR0203I: 应用程序:is ...