数组能通过一个变量存放多个相同类型的值,在存取数组中的值时直接根据数组中的下标即可完成,数组索引从0开始。
//定义数组
数据类型[] 数组名;
//初始化数组中的元素
数据类型[] 数组名 = new 数据类型[长度];
数据类型[] 数组名 = {值 1, 值 2, ...};
数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,...};
using System;
class Program
{
static void Main(string[] args)
{
int[] a = new int[5];
Console.WriteLine("请输入5个整数:");
for(int i = 0; i < a.Length; i++)
{
a[i] = int.Parse(Console.ReadLine());//将字符串类型转换成整型
}
int max = a[0];//这里假设a[0]是最大的
for(int i = 1; i < a.Length; i++)
{
if (a[i] > max)
{
max = a[i];
}
}
Console.WriteLine("数组中最大值为:" + max);
}
}
//定义多维数组
数据类型[ , , ...] 数组名;
//创建多维数组并初始化
数据类型[ , , ...] 数组名 = new 数据类型[m,n,...] {{ , , ...},{ , , ...}};
与一维数组的定义非常类似,每多一个维度则在定义时的[]
中增加一个,
。
using System;
class Program
{
static void Main(string[] args)
{
double[,] grades = { { 67, 81 }, { 100, 98 }, { 84.5, 86 } };
for (int i = 0; i < grades.GetLength(0); i++)
{
Console.WriteLine("第" + (i + 1) + "个学生成绩:");
for (int j = 0; j < grades.GetLength(1); j++)
{
Console.Write(grades[i, j] + " ");
}
Console.WriteLine();
}
}
}
在遍历多维数组元素时使用GetLength(维度)
方法能获取多维数组中每一维的元素,维度也是从 0 开始的,因此在该实例中获取数组中第一维的值时使用的是points.GetLength(0)
。
锯齿型数组
,即在多维数组中的每一维中所存放值的个数不同。// 定义锯齿型数组的语法形式
数据类型[][] 数组名 = new 数据类型[数组长度][];
数组名[0] = new 数据类型[数组长度];
using System;
class Program
{
static void Main(string[] args)
{
int[][] arrays = new int[3][];
arrays[0] = new int[] { 1, 2 };
arrays[1] = new int[] { 3, 4, 5 };
arrays[2] = new int[] { 6, 7, 8, 9 };
for(int i = 0; i < arrays.Length; i++)
{
Console.WriteLine("输出数组中第" + (i + 1) + "行的元素:");
for(int j=0;j
foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in
隔开的两个项组成。in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素。
foreach(数据类型 变量名 in 数组名)
{
//语句块;
}
该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为 true,foreach块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为 false,控制流程就转入到foreach块后面的执行语句。
foreach语句仅能用于数组、字符串或集合类数据类型。
下面的例子实现的功能是计算5名学生的总成绩和平均成绩。
using System;
class Program
{
static void Main(string[] args)
{
double[] grades = { 68, 83, 96, 90, 78.5 };
double sum = 0;
double avg = 0;
foreach(double grade in grades)
{
sum = sum + grade;
}
avg = sum / grades.Length;
Console.WriteLine("总成绩为:" + sum);
Console.WriteLine("平均成绩为:" + avg);
}
}
// 总成绩为:415.5
// 平均成绩为:83.1
Split()方法用于按照指定的字符串来拆分原有字符串,并返回拆分后得到的字符串数组。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个字符串:");
string str = Console.ReadLine();
string[] condition = { "," };
// 第一个参数是拆分的条件数组,可以在该数组中存放多个字符串作为拆分的条件
// 第二个参数StringSplitOptions.None是拆分的选项,表示如果在拆分时遇到空字符也拆分出一个元素
string[] result = str.Split(condition, StringSplitOptions.None);
for(int i = 0; i < result.Length; i++)
{
Console.Write("["+result[i] + "] ");
}
}
}
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个字符串:");
string str = Console.ReadLine();
string[] condition = { "," };
// StringSplitOptions.RemoveEmptyEntries参数表示拆分时不需要包含空字符串
string[] result = str.Split(condition, StringSplitOptions.RemoveEmptyEntries);
for(int i = 0; i < result.Length; i++)
{
Console.Write("["+result[i] + "] ");
}
}
}
冒泡排序的原理是将数组元素中相邻两个元素的值进行比较,将较小的数放到前面,每一次交换都将最大的数放到最后,依次交换后最终将数组中的元素从小到大排序。
using System;
class Program
{
static void Main(string[] args)
{
int[] a = { 55, 16, 7, 28, 36 };
for(int i = 0; i < a.Length; i++)
{
for(int j = 0; j < a.Length - i - 1; j++)
{
if (a[j] > a[j + 1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
Console.Write("升序排序后的结果为:");
foreach(int b in a)
{
Console.Write(b + " ");
}
Console.WriteLine();
}
}
// 升序排序后的结果为:7 16 28 36 55
如果要对数组中的元素从大到小排序,只需要将if(a[j]>a[j+1])
语句更改成if(a[j]即可。
System.Array
是所有数组的基类,其提供的属性和方法也可以被用到任何数组中。数组的Length属性就是该基类提供的。
方法 | 描述 |
---|---|
Clear() | 清空数组中的元素 |
Sort() | 冒泡排序,从小到大排序数组中的元素 |
Reverse() | 将数组中的元素逆序排列 |
IndexOf() | 查找数组中是否含有某个元素,返回该元素第一次出现的位置,如果没有与之匹配的元素,则返回 -1 |
LastIndexOf() | 查找数组中是否含有某个元素,返回该元素最后一次出现的位置 |
using System;
class Program
{
static void Main(string[] args)
{
int[] a = { 55, 16, 7, 28, 36 };
Array.Sort(a);
Console.Write("升序排序后的结果为:");
foreach(int b in a)
{
Console.Write(b + " ");
}
Console.WriteLine();
Array.Reverse(a);
Console.Write("降序排序后的结果为:");
foreach(int b in a)
{
Console.Write(b + " ");
}
}
}
// 升序排序后的结果为:7 16 28 36 55
// 降序排序后的结果为:55 36 28 16 7
虽然在数组中并没有提供对其降序排序的方法,但可以先将数组中的元素使用 Sort 排序,再使用Reverse方法将数组中的元素逆序,这样就完成了从大到小的排序。