首页 > 编程语言 >C#中的数组

C#中的数组

时间:2024-01-11 16:23:10浏览次数:26  
标签:arr Console 数组 C# int WriteLine CSharpProject1

C#中的数组

数组的基本定义

数组实际上是由一个变量名表示同一组类型的额数据元素。关于数组,这里有一些重要的定义:

  • 元素:数组的独立数据项称之为元素,数组中的所有元素必须是相同的类型;
  • 维度/秩:数组的维度数;
  • 维度长度:数组方向的位置个数;
  • 数组长度:数组的所有维度中的元素总数称之为数组的长度;
  • C#中的数组一旦被创建,打小就固定了,C#不支持动态数组,且默认的索引号为0。

对于数组来讲,数组就是对象,数组是引用类型。

一维数组

一维数组可以认为是单行或者单列向量。

对于一维数组的定义:

namespace CSharpProject1;

class Program
{
    static void Main(string[] args)
    {
        int[] arr = new int[10]; 
    }
}

访问一位数组中的元素

Console.WriteLine(arr[0]);

结果如下:

D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
0

Process finished with exit code 0.

在一维数组数组中有特定的性能优化指令,而在矩形数组和交错数组中并没有性能优化指令。

矩形数组

二维数组的定义和取值:

namespace CSharpProject1;

class Program
{
    static void Main(string[] args)
    {
        int[,] arr1 = new int[5, 7];    //5行7列的二维数组
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 7; j++) arr1[i, j] = i * j;
        }
        Console.WriteLine(arr1[4,5]);
    }
}

结果如下:

D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
20

Process finished with exit code 0.

三维数组的定义及其使用

namespace CSharpProject1;

class Program
{
    static void Main(string[] args)
    {
        int[,,] arr2 = new int[5, 7, 9];    //三维数组,维数分别为5/7/9
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                for (int k = 0; k < 9; k++) arr2[i, j, k] = i * j * k;
            }
        }
        Console.WriteLine(arr2[3, 4, 5]);
    }
}

结果如下所示:

D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
60

Process finished with exit code 0.

交错数组

交错数组是数组的数组,也就是说在数组里面再定义数组。需要注意的是,交错数组里面的子数组的元素个数可以不同,如下就是声明一个交错数组及其用法:

namespace CSharpProject1;

class Program
{
    static void Main(string[] args)
    {
        int[][] arr3 = new int[3][];                    //实例化顶层数组
        arr3[0] = new int[5] { 1, 2, 3, 4, 5 };         //实例化子数组
        arr3[1] = new int[6] { 1, 2, 3, 4, 5, 6 };      //实例化子数组
        arr3[2] = new int[7] { 1, 2, 3, 4, 5, 6, 7 };   //实例化子数组
        Console.WriteLine(arr3[1][2]);          		//第二个子数组中第三个元素
    }
}

结果如下:

D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
3

Process finished with exit code 0.

C#中数组常用的方法

namespace CSharpProject1;

class Program
{
    static void Main(string[] args)
    {
        int[] arr = new int[]{1, 5, 4, 3, 65, 7, 8, 9, 10};
        //获取数组的维度数
        Console.WriteLine($"数组的维度数为:{arr.Rank}");
        //获取数组的长度
        Console.WriteLine($"数组的长度为:{arr.Length}");
        //排序
        Array.Sort(arr);
        Console.WriteLine("排序后的元素为");   //1 3 4 5 7 8 9 10 65 
        foreach(int e in arr) Console.Write($"{e} ");
        Console.WriteLine();
        //二分查找
        int index = Array.BinarySearch(arr,5);
        Console.WriteLine($"元素5在数组中的索引位置为{index}");
        Console.WriteLine();
        //将数组中的元素反转
        Array.Reverse(arr);
        foreach(int e in arr) Console.Write($"{e} ");
        Console.WriteLine();
        //返回数组中的索引
        int u = Array.IndexOf(arr,5);
        Console.WriteLine($"索引为5对应的元素为:{u}");
        //克隆数组
        int[] cloneArr = (int[])arr.Clone();
        Console.WriteLine("克隆后的数组为:");
        foreach(int e in cloneArr) Console.Write($"{e} ");
        Console.WriteLine();
        //将数组中的元素清空
        Array.Clear(arr);
    }
}

运行结果如下:

D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
数组的维度数为:1
数组的长度为:9            
排序后的元素为            
1 3 4 5 7 8 9 10 65       
元素5在数组中的索引位置为3
                          
65 10 9 8 7 5 4 3 1       
索引为5对应的元素为:5     
克隆后的数组为:           
65 10 9 8 7 5 4 3 1       

Process finished with exit code 0.

注意,克隆方法为数组进行浅复制,也就是说,它只创建了数组本身的额克隆,会产生两个独立的数组;如果克隆引用类型数据的数组则会产生指向相同对象的两个数组。

标签:arr,Console,数组,C#,int,WriteLine,CSharpProject1
From: https://www.cnblogs.com/lilyflower/p/17958822

相关文章

  • Cocos Creator 3.8 开发2D水面波纹Shader
     使用cocosCreator3.8做了一个游戏开中常用的2D的波浪水面,把技术点给记录一下,并提供完整的Shader代码。先上效果:   2D波浪的基本技术原理 2D水面波纹的主要原理就是给定一个正选波的边界,在范围内的片元uv就显示,在范围外的片元uv就不显示。同时利用正弦波表达式:......
  • crontab 任务报错生成小文件及邮件告警处理
    CRONTAB服务不断发邮件问题解决问题背景操作系统:LinuxSuSe12ps5规格:4C8G现在描述:操作系统异常卡慢,甚至无法正常登录到服务器,服务器/var/log/messages的日志过大,撑爆了/var目录磁盘空间。/var/spool/postfix/maildrop目录不存在会导致一起调起sendmail与postdrop的......
  • EAS_WEB更新解决方案后,无法登录web页面,显示connect.refused
    本地bos更新测试环境的解决方案后,启动bos,登录web提示连接异常失败;看日志,在图中打断点发现了异常:6999是测试服务i的端口,我本地应该是56898端口,对配服务器的实例server1和以前备份的server1.发现了不同:  在同步服务器解决方案后,配置文件被更改了,改回去重启服务即可......
  • C++模板例子
    title:"C++模板例子"date:2023-11-02T01:05:25+08:00tags:["C++"]categories:[]draft:false#include<vector>#include<type_traits>usingnamespacestd;classAA{};classBB{};classTest{public:template<cl......
  • 初始化C语言中的复杂声明
    int*(*(*arr[5])())(); float(*(*b())[])(); void*(*c)(char,int(*)()); void**(*d)(int&,char**(*)(char*,char**));float(*(*e[10])(int&))[5];上一篇我们分析过这些声明表示什么意思,今天我们初始化下这些声明int*(*(*arr[5])())......
  • JavaScript 中的事件循环
    事件循环是JavaScript运行时环境的核心组件。它负责调度和执行异步任务。事件循环通过持续监视两个队列来工作:调用堆栈和事件队列。调用堆栈是一种堆栈(LIFO)数据结构,存储当前正在执行的函数(存储代码执行期间创建的执行上下文)。WebAPI是异步操作(setTimeout、获取请求、promise)......
  • Vue.nextTick在动态更新iframe的src中的使用
    Vue.nextTick在动态更新iframe的src中的使用:https://codeleading.com/article/63673310260/ 当iframe中的地址src需要动态改变时,需要使用Vue.nextTick来切换地址src,否则DOM的地址不会实现更新,而是保持上一次的src。在数据变化后要执行的某个操作,而这个操作需要使用随数据改变......
  • AT_joisc2018_b 题解
    AT_joisc2018_b题解传送门题意有一个以原点为中心的正方形,有\(n(n\le100)\)条不在正方形内部的线段,你需要画一些不在正方形内部的线段,使得这些线段可以把正方形围起来,要求最小化你画的线段的长度和。思路我们需要画出一条闭合折线,并且能够把正方形包围。考虑我们一定是......
  • Centos7下安装和配置 Tengine
    engine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。Tengine,简单的讲就是对nginx进......
  • [ 20230308 CQYC省选模拟赛 T2 ] 塑料内存条
    题意给定\(n\)个不可重集,初始每个集合\(i\)有元素\(c_i\)。请你以下\(3\)种操作:1xy在集合\(x\)插入\(y\)。2xy将\(y\)集合所有数插入\(x\),并删除\(y\)集合(不影响别的集合的下标)3xy求\(x\)集合与\(y\)集合的交之和。Sol可塑性记忆。注意到前......