C#学习教程05——数组

文章目录

  • 5.数组
    • 5.1 一维数组
    • 5.2 多维数组
    • 5.3 foreach循环
    • 5.4 Split()拆分
    • 5.5 冒泡排序
    • 5.6 System.Array

5.数组

数组能通过一个变量存放多个相同类型的值,在存取数组中的值时直接根据数组中的下标即可完成,数组索引从0开始。

5.1 一维数组

//定义数组
数据类型[]  数组名;
//初始化数组中的元素
数据类型[]  数组名 = 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);
    }
}

5.2 多维数组

//定义多维数组
数据类型[ , , ...]  数组名;
//创建多维数组并初始化
数据类型[ , , ...]   数组名 = 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

C#学习教程05——数组_第1张图片

5.3 foreach循环

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

5.4 Split()拆分

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] + "] ");
        }
    }
}

在这里插入图片描述

C#学习教程05——数组_第2张图片

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] + "] ");
        }
    }
}

在这里插入图片描述

5.5 冒泡排序

冒泡排序的原理是将数组元素中相邻两个元素的值进行比较,将较小的数放到前面,每一次交换都将最大的数放到最后,依次交换后最终将数组中的元素从小到大排序。

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]即可。

5.6 System.Array

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方法将数组中的元素逆序,这样就完成了从大到小的排序。

你可能感兴趣的:(C#学习,c#,microsoft)