1、C# 数组
数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。
要声明数组,要使用方括号定义变量类型:
string[] langs;
下面声明了一个包含字符串数组的变量。要向其中插入值,我们可以使用数组字面量,就是将值放在以逗号分隔的花括号内,例如:
string[] langs = {"csharp", "java", "python", "cjavapy"};
要创建整数数组,可以编写:
int[] myNum = {10, 20, 30, 40};
2、访问数组中元素
可以通过数组索引来访问数组元素。
该语句访问langs
中第一个元素的值:
例如:
string[] langs = {"csharp", "java", "python", "cjavapy"};
Console.WriteLine(langs[0]);
// 输出 c
注意:数组索引以0
开头:[0]
是第一个元素。 [1]
是第二个元素,依此类推。
3、修改数组中元素
要更改指定元素的值,可以使用数组索引来修改,例如:
例如:
langs[0] = "javascript";
例如:
string[] langs = {"csharp", "java", "python", "cjavapy"};
langs[0] = "javascript";
Console.WriteLine(langs[0]);
4、数组长度
在C# 中,数组是非原始数据类型,这意味着它是具有不同方法的对象,可用于获取有关此对象的信息。例如,要找出一个数组有多少个元素,可以使用Length
属性:
例如:
string[] langs = {"csharp", "java", "python", "cjavapy"};
Console.WriteLine(langs.Length);
// 输出 4
5、循环遍历数组
可以使用for
循环遍历数组元素,并通过使用Length
属性来指定循环应运行的次数。
下面示例输出langs
数组中的所有元素:
例如:
string[] langs = {"csharp", "java", "python", "cjavapy"};
for (int i = 0; i < langs.Length; i++) {
Console.WriteLine(langs[i]);
}
6、foreach遍历数组
专用于循环遍历数组中的元素:
语法
for (type variable : arrayname) {
...
}
以下示例使用foreach
循环输出langs
数组中的所有元素:
例如:
using System;
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int [] n = new int[10]; /* n 是一个带有 10 个整数的数组 */
/* 初始化数组 n 中的元素 */
for ( int i = 0; i < n.Length; i++ )
{
n[i] = i + 100;
}
/* 输出每个数组元素的值 */
foreach (int j in n )
{
int i = j-100;
Console.WriteLine("Element[{0}] = {1}", i, j);
}
Console.ReadKey();
}
}
}
for
循环和foreach
循环,foreach
方法更简单方便,而且不需要计数(使用Length
属性),并且更具可读性。
7、多维数组
多维数组是包含一个或多个数组的数组。
如果需要创建二维数组,需要将每个数组添加到其各自的大括号内:
例如:
int[][] myNumbers = new int[2,4] { {1, 2, 3, 4},{5, 6, 7,8} };
myNumbers
现在是一个以两个数组为元素的数组。
要访问myNumbers
数组的元素,请指定两个索引:一个用于数组,一个用于该数组内的元素。本示例访问myNumbers
的第二个数组(索引下标为1
)中的第三个元素(索引下标为2
):
例如:
int [,] myNumbers = new int[2,4] { {1, 2, 3, 4},{5, 6, 7,8} };
int x = myNumbers[1][2];
Console.WriteLine(x);
也可以在通过嵌套for循环来获取二维数组的元素(需要指向两个索引下标):
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
int [,] myNumbers = new int[2,4] { {1, 2, 3, 4},{5, 6, 7,8} };
for (int i = 0; i < 2; ++i) {
for(int j = 0; j < 4; ++j) {
Console.WriteLine(myNumbers[i,j]);
}
}
}
}
}
8、Array 类
Array
类是 C# 中所有数组的基类,它是在 System
命名空间中定义。Array
类提供了各种用于数组的属性和方法。
具有以下功能:
- 给数组赋值:通过
SetValue
方法。 - 对数组排序:通过
Sort
方法,按升序。 - 查找数组元素:通过
IndexOf
方法能搜索指定的对象,返回整个一维数组中第一次出现的索引。
具体说明请查看下表:
序号 | 方法 & 描述 |
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 };
Console.Write("原始数组: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// 逆转数组
Array.Reverse(list);
Console.Write("逆转数组: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// 排序数组
Array.Sort(list);
Console.Write("排序数组: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}