13 数组--C#

1. 数组

数组实际上是由一个变量名称表示的一组同类型的数据元素。每个元素可以通过变量名和方括号,再加上一个或多个索引访问。

数组名称[index]

定义

元素: 数组的独立数据项。数组中的所有元素都必须是相同类型的,或者继承自相同类型。

秩、维度: 数组的维度可以为任何整数。称做秩 Rank

维度长度: 数组的每一维都由长度,即这个方向的位置个数。

数组长度: 数组的所有维度中的元素总数长度称为数组的长度。


要点:

数组一旦创建,大小就固定了。C# 不支持动态数组。

数组的索引从0开始的。


2.数组的类型

一维数组可以认为是单行元素或元素向量。

多维数组是由主向量中的位置组成的,每一个位置本身又是一个数组,称为子数组。子数组向量中的位置本身是一个子数组。


多维数组:矩阵数组,交错数组

矩形数组: myArray[4, 6, 1]

不管由多少维度,总使用一组方括号


交错数组: JagArray[2][5][3]

可以由不同长度的子数组,为每一个维度使用一对方括号



3. 数组是对象

数组实例从System.Array继承的对象。

Rank 返回数组的维度数的属性

Length 返回数组长度的属性(数组中的所有元素)

数组是引用类型,与所有引用类型一样,有数据的引用以及数据对象本身。数组对象本身总在堆上,引用在栈或堆上。

数组元素可以是值类型也可以是引用类型。(值类型数组,引用类型数组)



4. 一维数组和矩形数组

声明一维数组或矩形数组

类型和变量名称之间使用一对方括号,方括号内的逗号是秩说明符,指定数组的维度。没有逗号就是一维数组。


一维数组

        int[] a = new int[] { 1, 3, 5, 7, 9 };

            Console.WriteLine(a.Rank);

            Console.WriteLine(a.Length);

输出:

1 -- 表示一维数组

5 --表示5个元素


多维数组

            int[,] b = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };

            Console.WriteLine(b.Rank);

            Console.WriteLine(b.Length);

可以这样理解,一个平面的长方形,宽2 ,长3


输出:

2 --表示二位数组

6 --表示6个元素


矩形数组

int[,,] C = new int[3, 6, 2];

维度长度:3, 6, 2 ,可以这样理解,一个长方体高 3,长6 ,宽2

堆中分配内存区间:



6.访问数组元素

在数组中使用整型值作为索引来访问数组元素。

数组名【int索引值】


7. 初始化数组

对于预定义类型,整数默认值 0, 浮点型默认值 0.0, 布尔型默认值 False, 引用类型的默认值则是 null

一维数组自动初始化

int[4] intArr = new int[4];


显示初始化一维数组

在数组实例化的数组创建表达式之后加上一个初始化列表。

初始化值必须逗号隔开,并封闭在一组大括号内。

不必输入维度长度,编译器可以通过初始化值得个数来推断长度。

int[4] intArr = new int[4] { 1, 2, 3, 4 };


显示初始化矩阵数组

每一个初始化值向量必须封闭在大括号内

每一个维度也必须嵌套并封闭在大括号内

除了初始值,每一个维度得初始化列表和组成部分也必须使用逗号分隔。

int[,] Arr2 = new int[,] { { 10, 1 }, { 3, 6 },{ 9, 5 } };


初始化矩形数组得语法点

矩形数组使用嵌套得,逗号分隔得初始化列表进行初始化。

int[,,] intArry = new int[4, 3, 2]

            {

                {{1,2},{3,4},{5,6} },

                {{7,8},{9,0},{1,2} },

                {{3,4},{5,6},{7,8 }},

                {{1,2},{3,4},{5,6} },

            };


快捷语法:

int[] a1 = new int[3] { 1, 2, 3 };  // 等价

int[] a2 = { 1, 2, 3 };


隐式类型数组

初始化数组是,让编译器根据初值得类型来推断数组类型。

var a3 =new [] { 1, 2, 3 };


8. 交错数组

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

交错数组语法要求每一个维度都有一对独立的方括号。交错数组维度可以是大于1的任意整数。


9.  foreach 语句

允许我们连续访问数组中的每一个元素。

int[] a = new int[] { 1, 3, 5, 7, 9 };

 foreach (var item in a)

 {

       Console.WriteLine(item);

  }

迭代变量 item是只读的,不能改变它。


多维数组

int[,] b = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };

 foreach (var item in b)

{

         Console.WriteLine(item);

 }

输出:

1

2

3

4

5

6

3


10. 数组的协变

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

数组是引用类型数组,在赋值的对象类型和数组基类类型之间有隐式转换或者显示转换。


11. 数组继承的有用成员

Rank  获取数组的维度数

Length    获取数组中所有维度的元素总和

GetLength  返回数组指定维度的长度

Clear 将某一范围内的元素设置为0或null

Sort  在一维数组中堆元素进行排序

BinarySearch 使用二进制搜索,搜索一维数组中的值

Clone  进行数组的浅复制

Indexof  返回一维数组中遇到的第一个值

Reverse  反转一维数组中的某一范围内的元素

GetUpperBound 获取指定维度的上限


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。 ...
    iFakeLocation阅读 426评论 0 0
  • 数组是一个存储相同元素的固定大小的顺序集合.数组是用来存储数据的集合.通常认为数组是一个同一类型变量的集合. 声明...
    IT白鸽阅读 434评论 0 0
  • 朋友说他媳妇特别懒,我问咋了,他说他家住三楼,他媳妇每次在网上买东西的时候都在备注上写:孕妇,行动不便,请送货上门...
    JJJ___阅读 513评论 0 0
  • 数组1.一个存储相同类型元素的固定大小的顺序集合. 缺点:大小预先确定不可更改,插入和删除效率低. 2.数组是通过...
    赤色黎明_9970阅读 1,017评论 0 1
  • 数组:相同数据类型的成员组成的一组数据; 方便管理 ;一个数组里只能存放一个类型的值; 注:数组必须进行初始化赋值...
    cGunsNRoses阅读 1,553评论 0 0