(九)CSharp-数组

news2024/11/27 16:41:55

一、矩形数组

1、访问数组元素

  class Program
    {
        static void Main(string[] args)
        {
            int[] intArr1 = new int[15];
            intArr1[2] = 10;
            int var1 = intArr1[2];

            int[,] intArr2 = new int[5, 10];
            intArr2[2, 3] = 7;
            int var2 = intArr2[2, 3];

            int[] myIntArray = new int[4];

            for (int i = 0; i < 4; i++)
                myIntArray[i] = i * 10;

            for (int i = 0; i < 4; i++)
                Console.WriteLine($"Value of element{ i } = { myIntArray[i] }");

            Console.ReadKey();
        }
    }

2、初始化

1)显式初始化一维数组

int[] intArr = new int[]{ 10,20,30,40 };

2)显式初始化矩形数组

int[,] intArray2 = new int[,]{ { 10,1},{ 2,10 },{ 11,9 } };

3)初始化矩形数组的语法点

int[,,] intArray = new int[4,3,2]{
{ { 8,6 },{ 8,6 },{ 8,6 } },
{ { 8,6 },{ 8,6 },{ 8,6 } },
{ { 8,6 },{ 8,6 },{ 8,6 } },
{ { 8,6 },{ 8,6 },{ 8,6 } },
};

4)快捷语法

//arr1 和 arr2 等价
int[] arr1 = new int[3]{ 10,20,30 };
int[] arr2 = { 10,20,30 };

//arr3 和 arr4 等价
int[,] arr3 = new int[2,3]{ { 0,1,2 }, { 0,1,2 } };
int[,] arr4 = { { 0,1,2 }, { 0,1,2 } };

3、隐式类型数组

int[] intArr1 = new int[] { 10,20,30,40 };int[]:显式
var intArr2 = new [] { 10,20,30,40 };//隐式定义

int[,] intArr3 = new int[,] { { 10,1 },{ 10,1 },{ 10,1 } } ;
var intArr2 = new    [,] { { 10,1 },{ 10,1 },{ 10,1 } } ;

atring[] sArr1 = new string[] { "life", "liberty","pureuit of happiness" };
var      sArr2 = new       [] { "life","liberty" ,"pureuit of happiness"}
//

二、交错数组

交错数组是数组的数组。交错数组的子数组的元素个数可以不同。

int[][] jagArr = new int[3][];

//比如:
//jagArr[0][x]:子数组有x个元素
//agArr[1][y]:子数组有y个元素
//agArr[2][x]:子数组有z个元素

1、声明交错数组

int [][] SomeArr;//秩等于3
int [][][] OtherArr; //秩等于3

2、快捷实例化

声明:

int[][] jagArr = new int[3][];

不能在声明语句中初始化顶层数组之外的数组。

int[][] jagArr = new int[3][4];//编译错误

//声明初始化时,如果把[3][]设置为[3][4],则设置子数组为4是不被允许的。

3、实例化交错数组

class Program
    {
        static void Main(string[] args)
        {
            int[][,] Arr;
            Arr = new int[3][,];

            Arr[0] = new int[,] {   { 1, 2 }, { 10, 20 }   };

            Arr[1] = new int[,] {   { 1, 2 ,3}, { 10, 20,30 }   };

            Arr[2] = new int[,] {   { 1, 2,3,4 }, { 10, 20,30,40 }, { 100, 200, 300, 400 }   };

            //Arr.GetLength(0):获取 Arr 维度0的长度(维度是数组的层级)
            //Arr.GetLength(0) 是 int[3][x,y] 中的 3
            for (int i = 0; i < Arr.GetLength(0); i++)
            {
                //Arr[i].GetLength(0):获取 Arr[i] 维度0的长度
                //Arr[i].GetLength(0) 是 int[3][x,y] 中的 x
                for (int j = 0; j < Arr[i].GetLength(0); j++)
                {
                    //Arr[i].GetLength(1):获取 Arr[i] 维度1的长度
                    //Arr[i].GetLength(1) 是 int[3][x,y] 中的 y
                    for (int k = 0; k < Arr[i].GetLength(1); k++)
                    {
                        Console.WriteLine($"[{i}][{j},{k}] = { Arr[i][j,k] }");
                    }
                    Console.WriteLine("");

                }
                Console.WriteLine("");

            }

            Console.ReadKey();
        }
    }

输出结果:

[0][0,0] = 1
[0][0,1] = 2

[0][1,0] = 10
[0][1,1] = 20


[1][0,0] = 1
[1][0,1] = 2
[1][0,2] = 3

[1][1,0] = 10
[1][1,1] = 20
[1][1,2] = 30


[2][0,0] = 1
[2][0,1] = 2
[2][0,2] = 3
[2][0,3] = 4

[2][1,0] = 10
[2][1,1] = 20
[2][1,2] = 30
[2][1,3] = 40

[2][2,0] = 100
[2][2,1] = 200
[2][2,2] = 300
[2][2,3] = 400

4、比较矩形数组和交错数组

请添加图片描述

在 CIL中(中间语言),存在对一维数组进行性能优化的指令,而矩形数组没有这些指令。

四、foreach

1、迭代变量

由于迭代变量的值是只读的,所以它不能改变。

foreach(int item in arr1)
//item 是迭代变量

对值类型数组:

int arr1 = { 10,11,12,13 };

foreach(int item in arr1)
{
item++;//编译错误,不能改变 item 值
}

对引用类型数组:

MyClass[] mcArray = new MyClass[4];

foreach(int item in arr1)
{
item.MyField;//可以改变引用类型对象里的成员
item = null;//编译错误,不能改变 item 值。
}

2、foreach 语句和多维数组

示例

   class Program
    {
        static void Main(string[] args)
        {
            //矩形数组的示例
            int[,] arr1 = { { 10, 11 }, { 12, 13 } };

            foreach (var element in arr1)
            {
                //....
            }

            //交错数组的示例
            int[][] arr2 = new int[2][];
            arr2[0] = new int[] { 10, 11 };
            arr2[1] = new int[] { 12, 13, 14 };

            foreach (int[] array in arr2)
            {
                foreach (int item in array)
                {
                    //....
                }

            }
            Console.ReadKey();
        }
    }

五、数组协变

在某些情况下,即使某个对象不是数组的基类型,也可以把它赋值给数组元素。这种属性叫作数组协变。

可进行数组协变的条件:

  • 数组是引用类型数组。
  • 在赋值的对象类型和数组基类型之间有隐式转换或显式转换。
class A { }
    class B : A { }

    class Program
    {
        static void Main(string[] args)
        {
            A[] AArray1 = new A[3];
            A[] AArray2 = new A[3];

            AArray2[0] = new B();//产生协变
            AArray2[1] = new B();//产生协变
            AArray2[2] = new B();//产生协变
            Console.ReadKey();
        }
    }

请添加图片描述

六、数组继承的有用成员

1、数组基类继承的属性和方法

C# 数组派生自 System.Array 类。它们可以从基类继承很多有用的属性和方法。

表-数组继承的一些有用成员

成员类 型生存期意义
Rank属性实例获取数组的维度数
Length属性实例获取数组中所有维度的元素总数目
Getlength方法实例返回数组的指定维度的长度
Clear方法静态将某一范围内的元素设置为 0 或null
Sort方法静态在一维数组中对元素进行排序
BinarySearch方法静态使用二进制搜索,搜索一维数组中的值
Clone方法实例进行数组的浅复制——对于值类型数组和引用类型数组,都只复制元素
IndexOf方法静态返回一维数组中遇到的第一个值
Reverse方法静态反转一维数组中某一范围内的元素
GetUpperBound方法实例获取指定维度的上限

使用其中一些属性和方法的例子:

   class Program
    {
        public static void PrintArray(int[] a)
        {
            foreach (var x in a)
                Console.Write($"{ x }  ");

            Console.WriteLine("");
        }

        static void Main(string[] args)
        {
            int[] arr = new int[] { 15, 20, 5, 25, 10 };
            PrintArray(arr);

            Array.Sort(arr);
            PrintArray(arr);

            Array.Reverse(arr);
            PrintArray(arr);

            Console.WriteLine();
            Console.WriteLine($"Rank = { arr.Rank },Length = { arr.Length }");
            Console.WriteLine($"GetLength()     = { arr.GetLength(0) }");
            Console.WriteLine($"GetType()       = { arr.GetType() }");

            Console.ReadKey();
        }
    }

输出结果:

15 20 5 25 10
5 10 15 20 25
25 20 15 10 5
.
Rank = 1,Length = 5
GetLength() = 5
GetType() = System.Int32[]

2、Clone() 方法

Clone 方法为数组进行浅复制,它只创建了数组本身的克隆。

  • 克隆值类型数组会产生两个独立数组。
  • 克隆引用类型数组会产生指向相同对象的两个数组。
int[] intArr1 = { 1,2,3 };
int[] intArr2 = (int[]) intArr1.Clone();
//int[]:数组类型
//Clone():返回 object

3、比较数组类型

表总结了3种类型的数组的重要相似点和不同点——比较数组类型的总结。

数组类型数组对象语法语法形状
一维: ◾ 在CIL 中有优化指令1单组🚫请添加图片描述
矩形:◾ 多维度◾ 多维数组中的子数组必须长度相同1单组请添加图片描述
交错:◾ 多维度◾ 子数组的长度可以不同多个多组🚫请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 报错 Updates were rejected because the remote contains work that you do

目录 Git 报错 Updates were rejected because the remote contains work that you do 1、命令行出现这种情况 2、idea出现同样的报错&#xff0c;解决方式同上 Git 报错 Updates were rejected because the remote contains work that you do 这个报错实在是让我受不了了&…

Kendo UI for jQuery---03.组件___网格---05.编辑---01.概述

编辑概述 编辑是剑道 UI 网格的一项基本功能&#xff0c;它允许您操作其数据的呈现方式。 网格提供以下编辑模式&#xff1a; 批量编辑 内联编辑 弹出窗口编辑 自定义编辑开始 要启用编辑&#xff1a; 熟悉剑道UI中的常见编辑概念 配置网格的数据源 通过配置定义字段schem…

PaddleOCR Windows下配置环境并测试

目录 1.PaddleOCR 介绍 1.2 PaddleOCR支持模型介绍 2.环境配置 3.PaddleOCR源码 1.PaddleOCR 介绍 PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库&#xff0c;助力开发者训练出更好的模型&#xff0c;并应用落地。 支持多种OCR相关前沿算法&#xff0c;在此基础上打…

简单的一批的DockerFile构建(内附超详细docker学习笔记)

目录 介绍 DockerFile常用保留字指令 演示自定义构建java8版本centos docker专用学习笔记 超全 介绍 总结: 从应用软件的角度来看&#xff0c;Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段&#xff0c; * Dockerfile是软件的原材料 * Docker镜像是软件…

SpringBoot参数校验入门

一、添加依赖 <!--参数校验--> <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId> </dependency> <!--lombok--> <dependency><groupId>org.projectlombok&…

few-shot object counting论文汇总

文章目录 2021OBJECT COUNTING: YOU ONLY NEED TO LOOK AT ONE 2022CounTR: Transformer-based Generalised Visual CountingFew-shot Object Counting with Similarity-Aware Feature Enhancement 2023CAN SAM COUNT ANYTHING? AN EMPIRICAL STUDY ON SAM COUNTING 2021 OBJ…

【MSP432电机驱动学习】TB6612带稳压电机驱动模块、MG310电机、13线霍尔编码器

所用控制板型号&#xff1a;MSP432P401r 今日终于得以继续我的电赛小车速通之路&#xff1a; 苏轼云 “ 素面常嫌粉涴 &#xff0c; 洗妆不褪朱红。 ” 这告诫我们不能只注重在表面粉饰虚伪的自己&#xff0c;要像梅花一样&#xff0c;不断磨砺自己的内在~ 后半句是 “…

广告经济学与垄断竞争分析

产品与广告 产品的分类&#xff1a; 搜寻品&#xff1a;消费者在购买商品之前就可以知道其特征的产品经验品&#xff1a;只能够在使用后才能确认其特征的产品信任品&#xff1a;产品的质量即使在消费之后仍然不能确定&#xff0c;例如医学和法律服务 广告的分类&#xff1a;…

【C++】在线编译器推荐,让你随时随地编写代码

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 支持调试网站Repl.itOnlineGDB 2️⃣ 不支持调试网站Wandboxjson.cnjdoodletutorialspointcppshellideonecoliruonline-ide 3️⃣ 性能分析网站Quick C BenchmarkCompare C Builds 4️⃣ 其它C Insights&#xff08;学习模板、C11…

Java阶段四Day04

Java阶段四Day04 文章目录 Java阶段四Day04关于SLF4j日志框架使用Sql注解关于DAO架构关于Service关于异常 关于SLF4j日志框架 在开发实践中&#xff0c;通常禁止使用System.out.println()这种语句输出信息&#xff0c;主要原因有&#xff1a; 输出效率低下&#xff0c;特别是字…

A fight among three “三国”混战 | 经济学人20230520版社论双语精翻

《经济学人》2023年5月20日封面&#xff08;社论&#xff09;文章精翻&#xff1a;《全球支付系统的“三国”混战》&#xff08;A fight among three&#xff09; A fight among three “三国”混战 The fight over the future of global payments 全球支付的未来之争 Digital …

函数重载分析

函数重载 (Function Overload) 用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同 函数重载至少满足下面的一个条件&#xff1a; 参数个数不同 参数类型不同 参数顺序不同 上面的两个函数可以构成重载函数吗&#xff1f; 当默认参数遇上函数重载会发…

分布式系统概念和设计——分布式多媒体系统

分布式系统概念和设计 分布式多媒体系统 QoS QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;是一种网络管理和控制技术&#xff0c;可以对网络流量进行管理和调度&#xff0c;以确保网络对不同类型的数据流的传输可以提供适当的带宽、传输延迟、抖动和可…

《交通规划》——最短路分配方法

《交通规划》——最短路分配方法 说明&#xff1a;下面内容&#xff0c;将用python、networkx实现刘博航、杜胜品主编的《交通规划》P198页的例题&#xff0c;主要是实现最短路径分配方法。 1. 题目描述如下&#xff1a; 2. networkx构建网络 import networkx as nx import …

Spring6 面向切面(AOP)

文章目录 1、场景模拟1.1、声明接口1.2、创建实现类1.3、创建带日志功能的实现类1.4、隐藏问题 2、代理模式2.1、概念2.2、静态代理2.3、动态代理2.4、测试 3、AOP概念及相关术语3.1、概述3.2、相关术语①横切关注点②通知&#xff08;增强&#xff09;③切面④目标⑤代理⑥连接…

跨模态检索论文阅读:Dissecting Deep Metric Learning Losses for Image-Text Retrieval(GOAL)

Dissecting Deep Metric Learning Losses for Image-Text Retrieval 剖析图像文本检索中的深度度量学习损失 2022.10 视觉语义嵌入&#xff08;VSE&#xff09;是图像-文本检索中的一种流行的应用方法&#xff0c;它通过学习图像和语言模式之间的联合嵌入空间来保留语义的相似性…

2023.06.14 QT day3

用QT实现的简单文本编辑器 头文件widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QTextEdit> #include <QFont> #include <QFontDialog> #include <QColor> #include <QColorDialo…

C语言符合类型之结构篇(结构指针)

结构相关知识总结 什么是结构&#xff1f;结构的声明与简单使用结构的初始化结构中成员变量的访问结构的初始化器结构数组结构数组的声明结构数组的成员标识 结构的嵌套结构指针结构作为参数在函数中传递将结构成员作为参数进行传递将结构地址(指向结构的指针)作为参数进行传递…

leetcode 279.完全平方数

题目描述 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 …

cmu db p4

在lab4中实现一个基于 2PL 的并发控制方式&#xff0c;自动为并发事务执行加锁解锁&#xff0c;提供可串行化能力并实现可重复读、读已提交、读未提交三种隔离度 Lock Manager&#xff1a;锁管理器&#xff0c;利用 2PL 实现并发控制。支持 REPEATABLE_READ、READ_COMMITTED 和…