[转载] 黑马程序员_学习笔记8_C#基础归纳之数组

参考链接: Java中的锯齿数组Jagged array

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 

什么是数组? 

   数组是一组数据结构,它可以包含同一类型的多个元素。C#用特殊记号还申明和初始化数组。这其实是在后台把当前数组和Array联系起来, 

以便数组可以使用Array提供的某些功能。 

  

数组分简单数组和多维数组。 

   

简单数组: 

数组的申明 int[] intarr; 

数组的初始化有四种形式: 

1: int[] intarr = new int[4];//给定数组阶数 

2: int[] intarr = new int[4]{1,2,3,4};//给定阶数,并给定每个元素的具体数值 

3: int[] intarr = new int[]{1,2,3,4};//不给定阶数,就必须每个元素的具体值(和1对应) 

4:  int[] intarr = {1,2,3,4};//最简形式(类比第三种) 

  

访问数组元素: 

  数组只有再申明和初始化之后才能访问到数组元素。数组元素只支持整数索引。 

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

   int v1 = intarr[0];//访问 

   intarr[1] =5;//赋值 

使用数组也特别注意一点 不要超过当前数组的索引长度。 

比如:intArr[100]=6;//此时编译器就会跑出一个IndexOutOfRangeException的异常。 

  

数组元素的迭代访问可以有两种方式。 

通过数组元素的Length属性 进数组进行循环迭代。 

for(int i=0;i<intarr.Length;i++) 

          Console.WriteLine(intarr[i]Tostring() 

该可以使用foreach对数组进行迭代 

foreach(int i in intarr) 

    Console.WriteLine(i.ToString()); 

不是所有的数据对象都能使用foreach进行迭代,只有实现了IEnumeraable接口的对象 才能使用foreach对其进行迭代。 

前面也已经说过了,在C#中使用【】申明数组 其实也是使用Array类的标记,Array是实现了该接口的,所以你可以使用foreach对 

数组对象进行迭代。 

  

数组除了上面 .NET预定义的数据值类型之外,还可以是我们自己定义的应用类型。 

class  Person 

     public Person(string name,string age) 

     { 

            this.Name = name; 

            this.Age =age; 

     } 

      public string Name{get;set;} 

     public int Age{get;set;} 

  

Person[] MyPersons = new Person[2]; 

MyPerson[0]=new Person("jack",25); 

MyPerson[1] = new Person("Tom",21); 

  

特别注意,对于引用类型数组,必须为每一个数组元素指定引用(分配内存)。否则 就会跑出NullReferenceExpection异常. 

  

  

多维数组: 

二位数组 

 int[,] twodim = new int[1,1]; 

  twodim[0,0]=1; 

  twodim[0,1]=2; 

  twodim[1,0]=3; 

  twodim[1,1]=4; 

  二维数组可以看做是一个普通的表结构。 

 二维数组的遍历 

 for(int row =0;row<twodim.Length(0);row++)//先遍历行 

     for(int col=0;col<twodim.Length(1);col++)//在遍历列 

    { 

             Console.WriteLine("Row  {0}   Col{1}       Value{2}",row,col,twodim[row,col]); 

   } 

  

锯齿数组: 

 二维数组可以看错是一个标准的表结构,锯齿数组就可以看错是一个不标准的表结构了 它的列不定必须相同。 

锯齿数组的申明: 

int[][] jagged = new int[3][];//前面一个中括号中3表示该锯齿数组有三行,后面[]什么也不写,表明列不确定,这也符合锯齿数组的定义。 

锯齿数组的每一行其实都是一个单独的数组对象。 

jagged[0] = new int[2]{1,2,3};// 

jagged[1] = new int{4,5,6,7}; 

jagged[2] ={7,8,9,10,11}; 

  

锯齿数组的遍历: 

for(int row =0;row<jagged.Length;row++)//遍历行,也就是遍历有多少个数组 

      for(int element=0;element<jagged[row].Length;element++)//jagged[row]..当前行的那个数组的长度 

    { 

                Console.WriteLine("第{0}个数组 该数组的当前索引为{1}    值为{2}",row,element,jagged[row][element]); 

   

   } 

  

  

Array类;在C#中使用[ ] 申明数组其实就是使用Array的标记。 

Array是一个抽象类,抽象类不能实例化,所以不能使用Array[ ]等形式创建数组。 

但Array类提供了一个静态的方法用于创建各种数据类型的数组 

Array  intarray1 = Array.CreateInstance(typeof(int),5);//此方法的返回类型仍然为Array 

for(int i=0;i<5;i++) 

     intarray1.SetValue(i,i); 

可以通过强制转化将intarray1转化为int[ ]类型 

int[] MyIntArr = (int[])intarray1; 

  

复制数组: 

因为数组是引用类型,所以讲一个数组的变量赋于另外一个数组的变量时,就会得到两个引用相同的一组变量。 

而赋值数组,会使数组实现ICloneable接口。这个接口的方法会定义的Clone()方法将创建数组的浅表复制。 

   浅表复制的意思是: 

如果数组元素是值类型,数组间的复制只是复制当前数组的值,而非引用 

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

int [] cloneArr = (int[ ])intArr.Clone(); 

如果数组包含的不是值,而是引用,则直接赋值引用 

Person[ ]  Persons ={new Person("jack",25),new Person("Tom",21)}; 

Person[ ] ClonePersons = (Person[ ])Persons.Clone(); 

  

 数组的排序: 

数组的排序 可以调用Array的Sort方法,此方法通过QuickSort的算法对数组中的元素进行排序。 

Sort方法中 进行排序的元素 必须要实现IComparable接口。.NET内置的string和int等数据类型默认已经实现了该接口, 

所以 你的数组只要是这两种形式的都可以直接使用Array.Sort()方法进行排序。 

现在我们来敲一个例子,能让我们自定义的数据类型能够使用Array.Sort方法进行排序。 

//先定义一个数据类型

public class Person

{

      public Person(string FirstName,string LastName)

     {

         this.FirstName = FirstName;

         this.LastName = LastName;

     }

 

     public string FirstName;

     public string LastName;

我们使Person类继承IComparable<T>接口(不知道什么是T的 学习日记7泛型) 

public class Person:IComparable<Person>

{

      //实现接口中的CompareTo方法

    public CompareTo(Person other)

     {

           if(other==null)

                  throw new ArgsNullExecption("Null");

           int result = this.LastName.CompareTo(other.LastName);

            if(result==0)

            {

                 this.FirstName.CompareTo(other.FirstName);

 

            }

             return result;

     }

 这个方法首先是比较 Person的LastName 如果相同  就比较 LastName; 

然后我们就可以使用Array.Sort方法对Person类的对象进行排序了。 

Person[] Persons = {new Person("jack",25),new Person("Tom",21)};

 

Array.Sort(Persons); 

  

数组做作为参数 和返回值: 

int[ ]  DoSomeWithArr(int[ ]) 

   //............... 

}  

  

数组协变: 

数组支持协变。这表示数组可以申明为基类,其他的派生类都可以作为当前数组的参数 

static void DisplayArrayObject(Object[] obj) 

     //........ 

  

数组片段 

ArraySegment<T> 

它有一个构造函数的重载 

new ArraySegment<int>(param1,param2,param3); 

param1表示为你需要截取的数组对象 

Param2 表示开始索引 

param3 表示长度 

 ---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://net.itheima.com/

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

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

相关文章

2Python全栈之路系列之MysQl基本数据类型

Python全栈之路系列之MySQL基本数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型&#xff0c;大致可以分为三类&#xff1a; 数字类型 日期和时间类型 字符串类型 数字类型 类型大小用途BIT-二进制TINYINT1字节小整数值INT or INTEGER4字…

[转载] JAVA笔记_(Day04,Day05)函数数组

参考链接&#xff1a; 了解Java中的数组IndexOutofbounds异常 文章目录 函数定义练习误区重载&#xff08;overload&#xff09;重载选择题练习函数的内存调用问题 数组定义数组的内存图解数组的常见问题应用求和最大值将数组转成字符串查表法转十六进制查表版&#xff08;十六…

VDI序曲二 RemotoAPP部署

首先&#xff0c;我们需要准备如下角色&#xff1a;沿用VDI序曲一的2台物理服务器以及角色我们在物理服务器1的hyper-v上&#xff0c;我们利用之前我介绍的“服务器虚拟化之准备母盘VHD”的方法再创建如下虚拟机&#xff1a;WIN-RDAPP&#xff1b;WIN-RDWA&#xff1b;WIN-RDCB…

[转载] Java ArrayList toArray(T[] a) 解惑

参考链接&#xff1a; Java中的Array vs ArrayList 先看一个小的代码片段 ArrayList<Integer> arrayList new ArrayList<>(); Collections.addAll(arrayList, 11, 21, 31, 41, 51); Integer[] a new Integer[0]; Integer[] b new Integer[arrayList.size()]; …

CentOS7使用firewalld打开关闭防火墙与端口(转载)

1、firewalld的基本使用 启动&#xff1a; systemctl start firewalld 查看状态&#xff1a; systemctl status firewalld 停止&#xff1a; systemctl disable firewalld 禁用&#xff1a; systemctl stop firewalld 2.systemctl是CentOS7的服务管理工具中主要的工具&#xff…

多任务管理类 MutilTaskManager

计算和计算所需的数据能被较为平均的非配到若干task的时候&#xff0c;下面的任务管理类可以提供在大数据大计算量的情况下非精确的控制task的执行数量来限制计算量和内存占用量.下面是代码&#xff08;非线程安全版本&#xff09;&#xff1a; public class MutilTaskManager{…

[转载] Scanner和bufferreader读取控制台字符的区别

参考链接&#xff1a; Java中Scanner和BufferReader类之间的区别 从开始学习Java就用了scanner&#xff0c;因为比较简单每当遇到空格键或者换行键则读取下一个字符&#xff0c;一般用法 while(input.hasNextInt()){ int n input.nextInt(); int t input.nextInt(); int c …

Node.js meitulu图片批量下载爬虫1.051

原有1.05版程序没有断点续传模式&#xff0c;现在在最近程序基础上改写一版1.051. // // meitulu图片批量下载爬虫1.051 // 用最近的断点续传框架改写原有1.05版程序 // 2017年11月21日 //// 内置https模块 var httpsrequire("https");// 内置http模块 var httprequi…

[转载] Java实现归并排序(超详细,新手请进)

参考链接&#xff1a; Java中将数组合并为的新数组 归并排序 大家好&#xff0c;这是我第一次在CSDN上写东西&#xff0c;因为我一直觉得有需要就去找别人的blog看看就好&#xff0c;但我发现自己写出来的东西确实能加深记忆。我半路出家&#xff0c;属实是个菜鸟&#xff0…

centos6设置静态IP

#编辑配置文件,添加修改以下内容 vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTOstatic #启用静态IP地址 ONBOOTyes #开启开机自动启用网络连接 IPADDR192.168.21.129 #设置IP地址 NETMASK255.255.255.0 #设置子网掩码 GATEWAY192.168…

[转载] 1022 D进制的A+B (20分)【java题解】【80ms】

参考链接&#xff1a; Java流Stream 题解 使用 toUnsignedString&#xff08;&#xff09;即可 我有仔细读过toUnsignedString&#xff08;&#xff09;&#xff0c;有兴趣可以看看 第3章 java的基本程序设计结构【补缺学习】【注释与数据类型】【核心技术卷I】 impor…

mysql 5.6.4以上版本innodb支持全文索引的测试

对于mysql 5.6.4以上版本innodb支持全文索引的测试 在mysql官网&#xff0c;innodb引擎在5.6.4版本提供了对全文索引的支持&#xff0c;笔者对此做了测试&#xff0c;发现对中文全文检索的支持依然不理想&#xff0c;但却确实提供了对英文的全文支持。 12.9.5 Full-Text Restri…

[转载] Java字符串分割方法

参考链接&#xff1a; Java中的StringTokenizer方法的示例 2 [sizemedium]1.用split()方法进行分割&#xff0c;分割开的子字符串放入数组&#xff0c;然后进行处理。 示例代码如下&#xff1a; public class SplitTest { /** * param args * author colin */ …

[转载] Java StringBuilder StringJoiner

参考链接&#xff1a; 何时在StringBuilder上使用StringJoiner 1. StringBuilder Java编译器对String做了特殊处理&#xff0c;使得我们可以直接用拼接字符串。 虽然可以直接拼接字符串&#xff0c;但是&#xff0c;在循环中&#xff0c;每次循环都会创建新的字符串对象&a…

EMC VMAX的磁盘构成,fast policy(重要)

首先是流程&#xff0c; 不同种类的磁盘&#xff08;sata&#xff0c;fc&#xff0c;flah&#xff09;->disk group->raid->DATA volume->thin pool->TDEV and BCVDEV (lun) 然后细看&#xff1a; 1&#xff09; 不同种类的磁盘叫做disk&#xff0c;这是可见的物…

[转载] Java反射是什么?看这篇绝对会了!

参考链接&#xff1a; Java中的util.Arrays与Reflection.Array的示例 作者&#xff1a;火星十一郎 https://www.cnblogs.com/hxsyl 一.概念 反射就是把Java的各种成分映射成相应的Java类。 Class类的构造方法是private&#xff0c;由JVM创建。 反射是java语言的一个特性…

[精讲-3]Offline Domain Join

从windows 2008 ,windows 7开始起就具备脱机加入域的功能,就是它们在未连接DC的情况下,也可以加入域. 假如环境lab.com ,一台已加入域的PC (WIN7Client) 和即将加入域的PC(win7-2) 在win7client上run下面这个命令 DC已作了一次预先的动作:创建了computer object 在win7-2上,用本…

[转载] Java——toArray,集合转换为数组

参考链接&#xff1a; 从ArrayList到Java的Array数组转换&#xff1a;toArray()方法 package day04; import java.util.ArrayList; import java.util.Collection; /** * 集合转换为数组 * Collection中定义了两个方法 * Object[] toArray * <T>Y[] toArray(T[] array) …

c#匿名方法

//以下示例和说明都源于《visual c# 2005 技术内幕》 //匿名函数就是没有名字的函数&#xff0c;是专用于委托的函数。 using System; using System.Collections.Generic; using System.Text; namespace 匿名方法 { public delegate void DelegateClass(); public dele…