数组详细知识
数组对C#很重要,应该多加注意。C# 程序员应该清楚以下与数组有关的重要概念-
多维数组 - C#支持多维数组。多维数组的最简单形式是二维数组。
声明:
或int变量的3维数组,如-
多维数组的最简单形式是二维数组。二维数组是一维数组的列表。二维数组可以看作是一个表,该表具有x的行数和y的列数。以下是一个二维数组,其中包含3行4列
因此,数组a中的每个元素都由a [i,j]形式的元素名称标识,其中a是数组的名称,而i和j是唯一标识数组a中每个元素的下标。
初始化二维数组
可以通过为每行指定括号中的值来初始化多维数组。以下数组具有3行,每行有4列。
int [,] a = new int [3,4] {
{0, 1, 2, 3} , /* initializers for row indexed by 0 */
{4, 5, 6, 7} , /* initializers for row indexed by 1 */
{8, 9, 10, 11} /* initializers for row indexed by 2 */
};
使用下标访问二维数组中的元素。也就是说,数组的行索引和列索引。例如,
上面的语句从数组的第三行获取第四元素。您可以在上图中进行验证。让我们检查程序来处理二维数组-
using System;
namespace ArrayApplication {
class MyArray {
static void Main(string[] args) {
/* an array with 5 rows and 2 columns*/
int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };
int i, j;
/* output each array element's value */
for (i = 0; i < 5; i++) {
for (j = 0; j < 2; j++) {
Console.WriteLine("a[{0},{1}] = {2}", i, j, a[i,j]);
}
}
Console.ReadKey();
}
}
}
尝试一下
锯齿状数组
锯齿状数组是数组的数组。您可以将一个名为scores的锯齿状数组声明为int类型-
声明一个数组,不会在内存中创建该数组。创建上面的数组-
int[][] scores = new int[5][];
for (int i = 0; i < scores.Length; i++) {
scores[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个整数的数组。
以下示例说明了使用锯齿状数组-
using System;
namespace ArrayApplication {
class MyArray {
static void Main(string[] args) {
/* a jagged array of 5 array of integers*/
int[][] a = new int[][]{new int[]{0,0},new int[]{1,2},
new int[]{2,4},new int[]{ 3, 6 }, new int[]{ 4, 8 } };
int i, j;
/* output each array element's value */
for (i = 0; i < 5; i++) {
for (j = 0; j < 2; j++) {
Console.WriteLine("a[{0}][{1}] = {2}", i, j, a[i][j]);
}
}
Console.ReadKey();
}
}
}
尝试一下
将数组传递给函数
您可以在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();
/* an int array with 5 elements */
int [] balance = new int[]{1000, 2, 3, 17, 50};
double avg;
/* pass pointer to the array as an argument */
avg = app.getAverage(balance, 5 ) ;
/* output the returned value */
Console.WriteLine( "Average value is: {0} ", avg );
Console.ReadKey();
}
}
}
尝试一下
参数数组
有时,在声明方法时,您不确定作为参数传递的参数数量。C#参数数组(或参数数组)在这种时候会有所帮助。
以下示例演示了这一点-
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("The sum is: {0}", sum);
Console.ReadKey();
}
}
}
尝试一下
数组类
Array类是 C# 中所有数组的基类。它在系统名称空间中定义。Array类提供了与数组一起使用的各种属性和方法。
下表描述了Array类的一些最常用的属性-
属性 |
描述 |
IsFixedSize |
获取一个值,该值指示Array是否具有固定大小。 |
IsReadOnly |
获取一个值,该值指示Array是否为只读。 |
Length |
获取一个32位整数,该整数表示Array所有维度中的元素总数。 |
LongLength |
获取一个64位整数,该整数表示Array所有维度中的元素总数。 |
Rank |
获取数组的等级(维数)。 |
数组类的方法
方法 |
描述 |
Clear |
根据元素类型,将Array中的元素范围设置为零,false或null。 |
Copy(Array, Array, Int32) |
从第一个元素开始的数组中复制一系列元素,并将其粘贴到从第一个元素开始的另一个Array中。长度指定为32位整数。 |
CopyTo(Array, Int32) |
从指定的目标数组索引开始,将当前一维数组的所有元素复制到指定的一维数组。索引被指定为32位整数。 |
GetLength |
获取一个32位整数,该整数表示Array指定维中的元素数。 |
GetLongLength |
获取一个64位整数,该整数表示Array指定维中的元素数。 |
GetLowerBound |
获取数组中指定维的下限。 |
GetType |
获取当前实例的类型。 (继承自Object。) |
GetUpperBound |
获取数组中指定维的上限。 |
GetValue(Int32) |
获取一维数组中指定位置的值。索引被指定为32位整数。 |
IndexOf(Array, Object) |
搜索指定的对象,并返回整个一维Array中第一次出现的索引。 |
Reverse(Array) |
反转整个一维数组中元素的顺序。 |
SetValue(Object, Int32) |
为一维数组中指定位置的元素设置一个值。索引被指定为32位整数。 |
Sort(Array) |
使用Array每个元素的IComparable实现对整个一维Array中的元素进行排序。 |
ToString |
返回表示当前对象的字符串。 (继承自Object。) |
有关Array类属性和方法的完整列表,请查阅有关 C# 的Microsoft文档。
要记住的第二点是C不主张将局部变量的地址返回到函数外部,因此您必须将局部变量定义为静态变量。 现在,考虑以下函数,该函数将生成10个随机数并使用数组返回它们,并按如下所示调用此函数:
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("Original Array: ");
foreach (int i in list) {
Console.Write(i + " ");
}
Console.WriteLine();
// reverse the array
Array.Reverse(temp);
Console.Write("Reversed Array: ");
foreach (int i in temp) {
Console.Write(i + " ");
}
Console.WriteLine();
//sort the array
Array.Sort(list);
Console.Write("Sorted Array: ");
foreach (int i in list) {
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}
尝试一下