最近在学习C#,由于之前学习了C++,发现在C#与C++在数组的操作中有较大的不同,所以总结一下加深记忆。
数组的声明与创建
例如声明一个一维的int数组:
int []number;
声明一个二维int数组:
int [,]tnumber;
声明一个三维数组(以此类推):
int [,,] snumber;
随后创建数组:
number=new int [4];
tnumber=new int [4,6]
snumber=new int [4,5,6];
不像C++中使用int number [4] 。
可以在数组创建时使用列表初始化,如:
int []number=new int [4]{1,2,3,4};//大括号内的值也可以不是常量,可以是运行时计算的值
创建隐式类型的数组:var names=new []{“kara”,“rora”,“ciri”,“A2”};//保证都是相同的值类型
遍历数组
数组中定义了Length属性,表示数组中元素的个数。
除了使用传统的for循环来遍历数组外,还可以使用foreach来遍历数组。
实例如下:
int []pins=new int[4]{1,2,3,4};
foreach(int pin in pins)
{
Console.WriteLine(pin);
}
有以下
注意事项:
foreach总是遍历整个数组,并且顺序固定;
最重要的是:如果要改变数组元素的值,必须使用for循环,因为foreach中用于遍历的变量是每个数组元素的只读拷贝。
数组作为返回值传递
C++中不能返回一个数组,但C#中可以。
例子如下:
public int [] GetData()
{
//在这里构建好一个数组并返回
}
复制数组
数组是引用类型,如下的例子两个数组引用同一个内存
int []pins=new int [4]{1,2,3,4};
int []copy=pins;//两个数组引用同一个内存,对copy进行的操作也会在pins中体现出来
System.Array类提供了一下方法用于复制数组:
例子如下:
int []pins=new int [4]{1,2,3,4};
int []copy=new int [pins.Length];
pins.CopyTo(copy,0)//第二个参数表示复制时的起始位置
创建交错数组
为了减少不必要的空间浪费,C#中可以创建交错数组,交错数组每一列的长度可以不相等。
例子如下:
int [][]items=new int [4][];
int column0=new int [3];
int column1=new int [5];
int column2=new int [10];
int column3=new int [15];
items[0]=column0;
items[1]=column1;
items[2]=column2;
items[3]=column3;
参数数组
如果一个方法需要获取任意数量、任意类型的参数,就可以考虑使用参数数组,关键字为params
例子如下:
//输入任意数量的整数,从中找到最小值
public int Min(params int [] pins]
{
int min;
min =pins[0];
foreach(int pin in pins)
{
if (pin<min)
min=pin;
}
return pin;
}
若要接收任意类型的参数,则使用params object[]。
使用params需注意:
params只能用于一维数组。
是否有params关键字不能区分两个方法。
不能为参数数组使用ref或out关键字。
参数数组必须是方法的最后一项参数