深入理解C#的数组

什么是数组?

数组是一种数据结构,包含同一个类型的多个元素。

数组的声明:

int[] myIntArray; 

注:声明数组时,方括号 ([]) 必须跟在类型后面,而不是变量名后面。在 C# 中,将方括号放在变量名后是不合法的语法。
数组的初始化:

我们知道数组是引用类型,所以需要给他分配堆上的内存。

myIntArray = new int[3];
myIntArray = new int[] { 1, 2, 3 };
int[] myIntArray = { 1, 2, 3 }; //当使用这种方法对数组进行初始化时,只能在声明变量数组时使用,不能在声明数组之后使用。
数组的访问:

数组在声明和初始化后,可以使用索引器进行访问,索引器总是以0开头,表示第一个元素。

      int[] myIntArray = { 1, 2, 3 };
      Console.WriteLine("intValue = {0}", myIntArray[0]);
      Console.Read();

结果为:intValue = 1

数组的类型:

1.多维数组:

一般的数组(也称一维数组)用一个整数来索引,多维数组用两个或多个整数来索引。

static void Main(string[] args)
    {
      //声明一个二维数组 两行三列
      int[,] myIntArray1;
      myIntArray1 = new int[2, 3];
      myIntArray1[0, 0] = 1;
      myIntArray1[0, 1] = 11;
      myIntArray1[0, 2] = 111;
      myIntArray1[1, 0] = 2;
      myIntArray1[1, 1] = 22;
      myIntArray1[1, 2] = 222;
      Console.WriteLine("{0},{1},{2}", myIntArray1[0, 0], myIntArray1[0, 1], myIntArray1[0, 2]);
      Console.WriteLine("{0},{1},{2}", myIntArray1[1, 0], myIntArray1[1, 1], myIntArray1[1, 2]);
      Console.Read();
    }

结果为:

static void Main(string[] args)
    {
      //声明一个二维数组 三行三列
      int[,] myIntArray2;
      myIntArray2 = new int[,] { { 1, 11, 111 }, { 2, 22, 222 }, { 3, 33, 333 }, { 4, 44, 444 } };

      Console.WriteLine("{0},{1},{2}", myIntArray2[0, 0], myIntArray2[0, 1], myIntArray2[0, 2]);
      Console.WriteLine("{0},{1},{2}", myIntArray2[1, 0], myIntArray2[1, 1], myIntArray2[1, 2]);
      Console.WriteLine("{0},{1},{2}", myIntArray2[2, 0], myIntArray2[2, 1], myIntArray2[2, 2]);
      Console.WriteLine("{0},{1},{2}", myIntArray2[3, 0], myIntArray2[3, 1], myIntArray2[3, 2]);
      Console.Read();
    }

结果为:

static void Main(string[] args)
    {
      //声明一个三维数组 三行三列
      int[, ,] myIntArray3;
      myIntArray3 = new int[,,] { { {1,1}, {11,11}, {111,111} },
                    { {2,2}, {22,22}, {222,222} },
                    { {3,3}, {33,33}, {333,333} },
                    { {4,4}, {44,44}, {444,444} }
                   };

      Console.WriteLine("{0},{1},{2},{3},{4},{5}", myIntArray3[0, 0, 0], myIntArray3[0, 0, 1], myIntArray3[0, 1, 0], myIntArray3[0, 1, 1],
        myIntArray3[0, 2, 0], myIntArray3[0, 2, 1]);
      Console.WriteLine("{0},{1},{2},{3},{4},{5}", myIntArray3[1, 0, 0], myIntArray3[1, 0, 1], myIntArray3[1, 1, 0], myIntArray3[1, 1, 1],
        myIntArray3[1, 2, 0], myIntArray3[1, 2, 1]);
      Console.WriteLine("{0},{1},{2},{3},{4},{5}", myIntArray3[2, 0, 0], myIntArray3[2, 0, 1], myIntArray3[2, 1, 0], myIntArray3[2, 1, 1],
        myIntArray3[2, 2, 0], myIntArray3[2, 2, 1]);
      Console.WriteLine("{0},{1},{2},{3},{4},{5}", myIntArray3[3, 0, 0], myIntArray3[3, 0, 1], myIntArray3[3, 1, 0], myIntArray3[3, 1, 1],
        myIntArray3[3, 2, 0], myIntArray3[3, 2, 1]);
      Console.Read();
    }

结果为:

2.锯齿数组:

一般多维数组的大小是矩形的,而锯齿数组的大小比较灵活,每一行都可以有不同的大小。

在初始化锯齿数组时,先设置该数组包含的行数。定义各行中元素个数的第二个括号设置为空,因为这类数组的每一行包含不同的元素数。

static void Main(string[] args)
    {
      //声明一个锯齿数组 三行
      int[][] myIntArray4;
      myIntArray4 = new int[3][];

      myIntArray4[0] = new int[] { 1,11,111};
      myIntArray4[1] = new int[2] { 2, 22 };
      myIntArray4[2] = new int[] { 3,33,333,3333};

      for (int i = 0; i < myIntArray4.Length; i++)
      {
        for (int j = 0; j < myIntArray4[i].Length; j++)
        {
          Console.WriteLine("{0}",myIntArray4[i][j]);
        }
      }
      Console.Read();
    }

结果为:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C# 泛型数组学习小结

    C# 泛型和数组在 C# 2.0 中,下限为零的一维数组自动实现 IList<T>.这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法.此技术主要对读取集合中的数据很有用.IList<T> 接口不能用于在数组中添加或移除元素:如果试图在此上下文中调用 IList<T> 方法(如数组的 RemoveAt),将引发异常.下面的代码示例演示带有 IList<T> 输入参数的单个泛型方法如何同时循环访问列表和数组,本例中为整数数组. C# 泛型和数组

  • 浅析C#中数组,ArrayList与List对象的区别

    我们先来了解一下数组,因为数组在C#中是最早出现的.数组数组有很多的优点,比如说数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,比如: 复制代码 代码如下: string[] s=new string[3];//赋值s[0]="a";s[1]="b";s[2]="c";//修改s[1]="b1"; 但是,数组也存在一些不足的地方.比如在数组的两个数据间插入数据也是很麻烦的.还有我们在声明数组的

  • C# 中将数值型数据转换为字节数组的方法

    复制代码 代码如下: private void Value_ByteArray() {double doublevalue = 258.0;Int32 intvalue = 258;string strValue = "258";Int16 int16value = 258;MemoryStream doublemem = new MemoryStream();BinaryWriter doublebyteWR = new BinaryWriter(doublemem);doubleb

  • C#数组排序的两种常用方法

    本文实例讲述了C#数组排序的两种常用方法.分享给大家供大家参考.具体如下: 1.第一个例子 定义代码 #region Array数组排序1 public class Pigeon : IComparable<Pigeon> //类元素本身继承比较接口 { int XValue; int YValue; public string BatchNo { get; set; } public int CompareTo(Pigeon other) { if (other == null) throw

  • C# 数组查找与排序实现代码

    1. 查找对象 复制代码 代码如下: Person p1 = new Person( " http://www.my400800.cn " , 18 ); Person p2 = new Person( " http://www.my400800.cn " , 19 ); Person p3 = new Person( " http://www.my400800.cn " , 20 ); Person[] persons = ... { p1,

  • C#数组初始化简析

    题外话:学习.NET已经有一年了,从C#->ASP.NET->WPF.主要以看电子书为主,比较少写代码.现在回头学习以前接触过的,随着知识与经验的的积累. 总是有各种惊喜,震惊!C#数组就是其中之一,我把它作为自己博客园的处女作. C#数组与其它C系列语言有着很多的不同,以前接触的时候理解出现很大的偏差.尤其是对多维数组的认识.多维数组与C语言相比是一个新概念.而最开始的 时候我把它当成交错数组的特殊类型. 首先重二维数组与简单的交错数组的初始化与访问开始 复制代码 代码如下: int[,]

  • c#数组详解

    数组是一种数据结构,其声明方式如下: type[] arrayName; 数组具有以下属性: 1.数组可以是一维.多维或交错的.     2.数值数组元素的默认值设置为零,而引用元素的默认值设置为 null.     3.交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null.     4.数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1.     5.数组元素可以是任何类型,包括数组类型. 一维数组 //声明一维数组,没有初始化,等于null int[] int

  • 深入理解PHP之数组(遍历顺序) Laruence原创

    经常会有人问我, PHP的数组, 如果用foreach来访问, 遍历的顺序是固定的么? 以什么顺序遍历呢? 比如: 复制代码 代码如下: <?php $arr['laruence'] = 'huixinchen'; $arr['yahoo'] = 2007; $arr['baidu'] = 2008; foreach ($arr as $key => $val) { //结果是什么? } 又比如: 复制代码 代码如下: <?php $arr[2] = 'huixinchen'; $arr

  • 深入理解c语言数组

    一 数组名是什么 数组就是一段连续可用的内存.比如声明一个 int数组 int array[]={1,2,3}; array代表什么?有的资料说:数组名是指向数组首地址的常量指针. 下面我们可以验证一下.我都知道sizeof操作符可以返回一个对象或者类型所占的内存字节数.如:int i=1:那么sizeof(i) 的结果就是4(64位机器下的部分编译器是8) 那我们打印sizeof(array) printf("%d\n",sizeof(array)); 结果是:12. 但是我们都知道

  • 通过实例深入理解linux shell数组

    本文为大家介绍linxu shell中数组的相关知识,并举了很多例子供参考,包括数组的复制,计算,删除,替换等,是学习shell 数组的不可多得的好文章. 数组的声明: 1)array[key]=value # array[0]=one,array[1]=two2)declare -a array # array被当作数组名3)array=( value1 value2 value3 ... )4)array=( [1]=one [2]=two [3]=three ... )5)array="o

  • 深入理解PHP JSON数组与对象

    在PHP后端和客户端数据交互的过程中,JSON数据中有时格式不定,一会儿是数组,一会儿是对象,弄得客户端开发人员要崩溃的感觉. 因此,前后端相关人员先对PHP的json_encode函数原理有必要的了解是最重要的一个环节. PHP中的array是个万能的数据结构,并不像其它语言根据需要的场景会定义很多约束性的数据类型来描述结构,所以PHP程序员是很难给客户端人员讲清楚返回的是什么结构的数据的. 也就变成明明是通过PHP的数组数据编码成json的,但输出值有时是数组.有时是对象的情况. <?php

  • 深入理解C#的数组

    什么是数组? 数组是一种数据结构,包含同一个类型的多个元素. 数组的声明: int[] myIntArray; 注:声明数组时,方括号 ([]) 必须跟在类型后面,而不是变量名后面.在 C# 中,将方括号放在变量名后是不合法的语法. 数组的初始化: 我们知道数组是引用类型,所以需要给他分配堆上的内存. myIntArray = new int[3]; myIntArray = new int[] { 1, 2, 3 }; int[] myIntArray = { 1, 2, 3 }; //当使用

  • 举例理解C语言二维数组的指针指向问题

    之前对数组的概念一直没有理解透彻,只觉得数组名就是个常量指针而已,用法和基本的指针差不多.所以当我尝试用二级指针去访问二维数组时,就经常会出错.下面就是刚开始写的一个错误的程序: #include <stdio.h> int main() { int iArray[2][3] = {{1,2,3},{4,5,6}}; int **pArray = NULL; pArray = iArray; printf("array[0][0] = %d\n", pArray[0][0]

  • 直观理解C语言中指向一位数组与二维数组的指针

    一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我

  • 关于Java SE数组的深入理解

    目录 1.数组的基本概念 1.1 我们为什么需要数组? 1.2 数组的创建与初始化 1.3 数组的使用 1.4 数组的遍历 2.引用类型数组的深入讲解 2.1 简单了解 JVM 的内存分布 2.2 基本类型变量与引用类型变量的区别 2.3 通过方法更深刻理解引用变量 2.4 数组作为函数返回值 3.二维数组 3.1 二维数组的概念和内存布局 3.2 二维数组的定义和初始化 3.3 二维数组遍历 3.4 不规则的二维数组 总结 1.数组的基本概念 1.1 我们为什么需要数组? 假设说我们要存每个同

  • php中二维数组排序问题方法详解

    PHP中二维数组排序,可以使用PHP内置函数uasort() 示例一: 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示回调函数的第一个参数在前,第二个参数在后排列 $person = array( array('num'=>'001','id'=>6,'name'=>'zhangsan','age'=>21), array('num'=>'001','id'=>7,'name'=>'

  • 判断PHP数组是否为空的代码

    PHP判断数组为空首选方法:count($arr),size($arr); 复制代码 代码如下: $arr= array(""); echo count($arr); echo size($arr); //输出1 复制代码 代码如下: $arr= array(); echo count($arr); echo size($arr); //输出0 PHP判断数组为空方法2:empty($arr); 复制代码 代码如下: $arr= array(""); $result

随机推荐