1C#如何定义和使用多维数组

不建议使用ArrayList,当数组里的元素是值类型在操作的时候会出现大量的装箱与拆箱步骤性能会损失许多,而是应该用什么类型的元素创建什么类型的数组,除非你的元素有交叉或不确定才考虑采用ArrayList。

多维数组定义如下:
数组可以具有多个维度。例如,下列声明创建一个四行两列的二维数组:
C#

int[,]array = new int[4, 2];

另外,下列声明创建一个三维(4、2 和 3)数组:
C#

int[,,] array1 = new int[4, 2, 3];

数组初始化
可以在声明数组时将其初始化,如下例所示:
C#

int[,]array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } };
也可以初始化数组但不指定级别:
C#

int[,]array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
如果选择声明一个数组变量但不将其初始化,必须使用 new 运算符将一个数组分配给此变量。例如:
C#

int[,]array5;
array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK
//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error
也可以给数组元素赋值,例如:
C#

array5[2,1] = 25;

写一个详细的小例子,用一个动态的STRING型数组存放一个TABLE中的每一个单元中的内容:

DataTabledt = ds.Tables[0];//取出一个内容是动态的表
     string[,] str = newstring[dt.Rows.Count,dt.Columns.Count];

//用数组str来存放一个TABLE中的每一个单元中的内容

//dt.Rows.Count是表的行数,dt.Columns.Count是表的例数
    for(int i =0;i < dt.Rows.Count ; i++)
    {
       for(int j=0;j<dt.Columns.Count;j++)
       {
          str[i,j] =dt.Rows[i][j].ToString().Trim();
       }
    }

2 定义不定长数组

一维:

int[] numbers = new int[]{1,2,3,4,5,6}; //不定长

int[] numbers = new int[3]{1,2,3};//定长

多维

int[,] numbers = newint[,]{{1,2,3},{1,2,3}}; //不定长

int[,] numbers = new int[2,2]{{1,2},{1,2}};//定长

实例:

A:int[] mf1=newint[6];

//注意初始化数组的范围,或者指定初值; //包含6个元素的一维整数数组,初值1,2,3,4,5,6

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

B://一维字符串数组,如果提供了初始值设定项,则还可以省略 new 运算符

string[] mf3={"c","c++","c#"};

C://一维对象数组

Object[] mf4 = new Object[5] { 26, 27, 28, 29, 30 };

D://二维整数数组,初值mf5[0,0]=1,mf5[0,1]=2,mf5[1,0]=3,mf5[1,1]=4

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

E://6*6的二维整型数组

int[,]mf6=new mf[6,6];

3 实例定义一维和二维数组

[csharp] view plaincopy
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication1
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. //一维数组定义与初始化
  12. int[] one1 = new int[] {3,2,1 };//第一种方式
  13. int[] one2 = { 3, 2, 1 };      //第二种方式
  14. int[] one3;                    //第三种方式
  15. one3=new int[]{3,2,1};
  16. //二维数组定义与初始化
  17. //不规则二维数组
  18. int[][] array = new int[2][];
  19. array[0] = new int[3];
  20. array[0][1] = 11;
  21. array[0][2] = 12;
  22. array[1] = new int[] { 1, 2, 3, 4,5 };
  23. //或int[][] array = new int[2][] { new int[] {0,11,12 }, new int[] {1,2,3,4,5 }};
  24. Console.WriteLine( "不规则二维数组:  ");
  25. for (int i = 0; i < array.Length; i++)
  26. {
  27. foreach (int j in array[i])
  28. {
  29. Console.Write(j+"   ");
  30. }
  31. Console.WriteLine();
  32. }
  33. //固定长度的矩阵数组
  34. int[,] arrray1=new int[2,5]{{9,9,9,9,0},{0,0,9,0,0}};
  35. Console.WriteLine("规则二维数组输出方法一:  ");
  36. for (int ii = 0; ii < 2; ii++)                        //输出方法一
  37. {
  38. for (int j = 0; j < 5; j++)
  39. {
  40. Console.Write(arrray1[ii,j] + "   ");
  41. }
  42. Console.WriteLine();
  43. }
  44. Console.WriteLine("规则二维数组输出方法二:  ");
  45. foreach (int j in arrray1)//arrray.length=10;      //输出方法二
  46. {
  47. Console.Write(j + "   ");
  48. }
  49. Console.WriteLine();
  50. Console.ReadLine();
  51. }
  52. }
  53. }

4 对数组操作

取得数组元素个数:

int b;

b = sizeof (a)/sizeof (*a);

c#字符串及数组操作

2007-12-12 17:53字符串操作(取当前时间)

stringtime=convert.tostring(DateTime.Today).split( new char []{''});     textbox1.text=time[0]; 以空格作为分界点;

1)数组概述

C# 数组从零开始建立索引,即数组索引从零开始。C#中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。

声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。

int[] table; // not int table[];

另一细节是,数组的大小不是其类型的一部分,而在 C语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int对象的任意数组,而不管数组长度如何。

int[] numbers; // declare numbers as an intarray of any size

numbers = new int[10]; // numbers is a10-element array

numbers = new int[20]; // now it's a 20-elementarray

2)声明数组

C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:

一维数组:int[] numbers;

多维数组:string[,] names;

数组的数组(交错的):byte[][] scores;

声明数组(如上所示)并不实际创建它们。在C#中,数组是对象(本教程稍后讨论),必须进行实例化。下面的示例展示如何创建数组:

一维数组:int[] numbers = new int[5];

多维数组:string[,] names = new string[5,4];

数组的数组(交错的):byte[][] scores = new byte[5][]; for (int x = 0; x <scores.Length; x++) {scores[x] = new byt[4];

}

还可以有更大的数组。例如,可以有三维的矩形数组:int[,,] buttons = new int[4,5,3];

甚至可以将矩形数组和交错数组混合使用。例如,下面的代码声明了类型为 int 的二维数组的三维数组的一维数组int[][,,][,] numbers;

3)初始化数组

C# 通过将初始值括在大括号 ({}) 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。

注意如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null。

一维数组

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

string[] names = new string[3]{"Matt", "Joanne", "Robert"};

可省略数组的大小,如下所示:

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

string[] names = new string[]{"Matt", "Joanne", "Robert"};

如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:

int[] numbers = {1, 2, 3, 4, 5};

string[] names = {"Matt","Joanne", "Robert"};

多维数组

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

string[,] siblings = new string[2, 2] {{"Mike","Amy"}, {"Mary","Albert"} };

可省略数组的大小,如下所示:

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

string[,] siblings = new string[,] {{"Mike","Amy"}, {"Mary","Albert"} };

如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:

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

string[,] siblings = { {"Mike","Amy"}, {"Mary", "Albert"} };

交错的数组(数组的数组)

可以像下例所示那样初始化交错的数组:

int[][] numbers = new int[2][] { new int[]{2,3,4}, new int[] {5,6,7,8,9} };

可省略第一个数组的大小,如下所示:

int[][] numbers = new int[][] { new int[]{2,3,4}, new int[] {5,6,7,8,9} };-或-

int[][] numbers = { new int[] {2,3,4}, newint[] {5,6,7,8,9} };

请注意,对于交错数组的元素没有初始化语法。

4)访问数组成员

访问数组成员可以直接进行,类似于在 C/C++ 中访问数组成员。例如,下面的代码创建一个名为 numbers 的数组,然后向该数组的第五个元素赋以 5:

int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3,2, 1, 0};

numbers[4] = 5;

下面的代码声明一个多维数组,并向位于 [1, 1] 的成员赋以 5:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6},{7, 8}, {9, 10} };

numbers[1, 1] = 5;

下面声明一个一维交错数组,它包含两个元素。第一个元素是两个整数的数组,第二个元素是三个整数的数组:

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

下面的语句向第一个数组的第一个元素赋以 58,向第二个数组的第二个元素赋以 667:

numbers[0][0] = 58;

numbers[1][1] = 667;

5)数组是对象

在 C# 中,数组实际上是对象。System.Array 是所有数组类型的抽象基类型。可以使用 System.Array 具有的属性以及其他类成员。这种用法的一个示例是使用“长度”(Length) 属性获取数组的长度。下面的代码将 numbers 数组的长度(为 5)赋给名为 LengthOfNumbers 的变量:

int[] numbers = {1, 2, 3, 4, 5};

int LengthOfNumbers = numbers.Length;

System.Array 类提供许多有用的其他方法/属性,如用于排序、搜索和复制数组的方法。

6)对数组使用 foreach

C# 还提供 foreach 语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,下面的代码创建一个名为 numbers 的数组,并用 foreach 语句循环访问该数组:

int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1,0};

foreach (int i innumbers){System.Console.WriteLine(i);}

由于有了多维数组,可以使用相同方法来循环访问元素,例如:

int[,] numbers = new int[3, 2] {{9, 99},{3, 33}, {5, 55}};

foreach(int i innumbers){Console.Write("{0} ", i);}

该示例的输出为: 9 99 3 33 5 55

不过,由于有了多维数组,使用嵌套 for 循环将使您可以更好地控制数组元素

c#多维数组的建立及操作 总结相关推荐

  1. 二维数组数和指针操作的理解

    #include<string.h> #include <stdio.h> int main(void) {int a[4][2] = { { 2,4 },{ 6,8 },{ ...

  2. python二维数组的创建和操作

    python 二维数组的创建 实际上python中的二维数组,主要指的是二维列表 因为python中并没有数组这种数据结构 创建方法:标准方法 lists =[ [] for i in range(3 ...

  3. python中二维数组的建立,输入和输出

    ''' for循环: for i in range(x,y,dir):pass 首先这个区间是左闭右开 其次dir在省略的情况下默认为1,就是每次加一,也可以指定python的数组: python中是 ...

  4. python用语句输入一个3*3的二维矩阵_python中二维数组的建立,输入和输出

    ''' for循环: for i in range(x,y,dir): pass 首先这个区间是左闭右开 其次dir在省略的情况下默认为1,就是每次加一,也可以指定 python的数组: python ...

  5. java 二维数组的定义及操作

    二维数组的定义有很多方式: 第一种方式: 数据类型[][] 数组名 = new数据类型[行的个数][列的个数]; 下面以第一种方式声明一个数组,如下所示. int[][] xx= new int[3] ...

  6. matlab细胞数组类型建立及操作

    细胞数组结构图: 细胞数组中每个细胞存储一种类型的MATLAB数组,此数组中的数据可以是任何一种MATLAB数据类型或用户自定义的类型,其大小也可以是任意的.相同数组的第二个细胞的类型与大小可以和第一 ...

  7. Matlab的多维数组操作

    MATLAB中的多维数组是指具有两个以上维度的数组.在矩阵中,两个维度由行和列表示. 每个元素由两个下标(即行索引和列索引)来定义.多维数组是二维矩阵的扩展,并使用额外的下标进行索引.例如,三维数组使 ...

  8. python给矩阵赋值_解决Python二维数组赋值问题

    解决Python二维数组赋值问题 当我们采用s=[[0]*3]*2初始化一个数组,然后对s[0][0]进行赋值,改变的是第一列所有的值.因为用s = [[0]*3]*2 初始化数组,他表示的是指向这个 ...

  9. python课程设计矩阵对角线之和_Python二维数组实现求出3*3矩阵对角线元素的和示例...

    Python二维数组实现求出3*3矩阵对角线元素的和示例 题目:求一个3*3矩阵对角线元素之和. 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出. def two_dime ...

最新文章

  1. mongodb安装失败与解决方法(附安装教程)
  2. web spring 容器
  3. 联想研发支出从未超过2% 被指还不如政府补贴多
  4. PHP 数组遍历 foreach 语法结构
  5. matlab cat函数_如何用Matlab编写贪吃蛇游戏?(持续更新)
  6. leetcode题解(二叉树和递归问题)
  7. 把ct图像像素值转化为_CT爱好者的点点滴滴
  8. java判断栈中元素数目_Java数据结构与算法-栈和队列
  9. 同一个按钮绑定多个事件_带你走进JavaScript世界系列——事件处理程序之 IE 事件处理...
  10. Hotspot 偏向锁BiasedLocking 源码解析
  11. 国内外你知道的设计网站!给你的设计找点灵感!
  12. ubuntu系统克隆
  13. 智能视频抠图_黑科技 !人工智能抠图神器来了,抠图原来如此简单【918期】...
  14. 三代测序的简介和原理
  15. Proxmox VE ZFS 开启Thin Provision(精简配置)
  16. 爆肝!!! orcale 期末复习资料整理
  17. SAP如何将物料账期跨年月一次性开到当前
  18. VC++开发垃圾文件清理软件之三:程序的界面设计与实现----对话框界面
  19. oracle云怎么购买,使用免费的Oracle云服务-创建云主机
  20. C++程序员发展方向有哪些?

热门文章

  1. Hadoop——分布式资源管理框架YARN总结
  2. html+radio设置背景图片,jquery – 用单选按钮更改背景图像
  3. 为什么转换不了html,特殊字符不会转换为html实体(html_entity_decode不工作)
  4. ad20如何画出pcb板大小_多层pcb板是如何抄板的?
  5. 《c语言从入门到精通》看书笔记——第13章 预处理
  6. ppt文件限打开次数_PPT冷知识25条!看到第一条我就翻了车…
  7. centos xampp安装mysql_在xampp上部署dvwa|centos(linux)环境
  8. mysql模式匹配用什么关键字_MYSQL模式匹配:REGEXP和like用法
  9. ubuntu 符号连接的层数过多_Linux符号连接的层数过多解决
  10. code blocks代码性能分析_记一次Python Web接口优化,性能提升25倍!