如果需要使用同一类型的多个对象,数组是一种数据结构,它包含同一类型的多个元素

一、一维数组

1、数组的声明方法

 int [] a;

因为数组是引用类型,引用类型有个特点是:声明变量时不会马上分配一个内存,只有在用new关键字创建实例的时候,才会分配内存。

2、创建一个数组实例

a=new int[];

栈里的变量a引用了托管堆上的4个整型值。

如果事先不知道数组中包含多少个元素,可以使用集合。

3、初始化数组变量

int[] a=new int[]{,,,};

右边的[]里如果写了数字,那数字必须与{}数字的个数相同。[]给出的是4个,{}里必须写入4个数据。

4、初始化数组简写

初始化一个数组时可以不写数字自由分配元素个数,或者更简单直接省略new和int[]。

int[] a = new int[] { , ,  };
int[] a={,,,};

5、创建隐式类型的数组

var name=new [] {"tom","jack","luxi","mi"};

两个语法上的特别地方:

1、等号左边省略的[]

2、右边必须是new[]{}的形式

3、{}里的数据必须是相同类型,否则编译器不判断类型导致报错。

6、访问数组元素

提取数组元素

int b=a[];

数组元素的下标是从0开始的,所以b的值是4.

给数组元素重新赋值

int b=;

a[]=b;

二、多维数组

数组的维数没有限制,以二维数组举例

1、二维数组的声明

int[,] a;

2、二维数组创建实例

int [,] a=new int[,];

3、初始化

int [,] a= new int[,]{{,},{,},{,},{,}};
/*可以看做是一个4行2列的表,{5, 6}是第1行的数据,一共4行
5 6
7 2
9 3
5 4
*/

4、简写

int[,] a= new int[,] { { , },{ , },{ , },{5,4} };
int[,] a = {{ , },{ , },{ , },{5,4}};

5、访问数组元素

需要用两个坐标确定一个数的位置。

提取二维数组元素

int b = a[2, 1];

一定要记住只有new的时候[]里的数字表示的是行和列,其他地方a[2,1]这里的2和1是数组下标啊,是要从0开始算的。

对数组的某个元素重新赋值

a[,]=;
//这么写就把第三行第二列的值3变成了5

三、交错数组

交错数组也称之为数组的数组,

1、声明

int [][] a;

2、创建实例

int[][]a=new int[][];

这个数组里包含了3个数组,而且这3个数组的长度可以自由设置。

3、赋值

a[]=new int[] {,,,,};

a[]=new int[]{,};

a[]=new int[]{,,};

交错数组也可以包含二维的数组

例如

int[][,] a =new int[][,];
a[]=new int[,]{{,},{,}};
a[] = new int[,] { { , }, { , }, { , } };
a[] = new int[,] { { , } };

四、引用类型数组

有一个Person类

    public class Person
{
public string a { get; set; }
public string b { get; set; }
public override string ToString()
{
return String.Format("{0} {1}",a,b);
}
}

声明Person数组

Person[] per = new Person[];

引用类型的数组必须在使用前为其分配内存,否则会抛出NullReferenceException异常.

per[] = new Person { a = "李毅", b = "周杰" };
per[] = new Person { a = "Tom", b = "Jack" };

也可以初始化赋值

            Person[] per = {
new Person{ a = "李毅", b = "周杰" },
new Person{a = "Tom", b = "Jack" }
};

五、遍历数组

1、用for语句遍历数组

int [] a={2,9,5,8};
for(int x=0;x<a.Length;x++)
{
int b=a[x];
Console.WitreLine("b");
}

2、foreach遍历数组

foreach和for有一样的功能也能遍历数组,

int[] a={2,9,5,8};
foreach(int x in a)
{
Console.WriteLine(x);
}

3、for和foreach的对比

.foreach最大的优点就是能够在不知道数组下标的情况下遍历整个数组,代码可以写的简练些。其他的优势就没有for了

.for很灵活不仅可以能正着遍历还能倒着遍历以及还可以跳的遍历。

.如果循环的主题需要元素的下标,则需要用for

.如果需要修改数组元素,则必须用for,foreach修改会报错。

六、Ayyay类

七、数组作为参数

八、枚举

九、IEnumerator接口

十、元组

    class Program
{
static void Main(string[] args)
{
//赋值元组
var b = ("tom", );
//调用元组
Console.WriteLine(b.Item1);//tom
Console.WriteLine(b.Item2);//23 //给元组元素定义名称
var c = (name: "liu", age: );
Console.WriteLine(c.age);//29
//虽然vs隐藏了Item1,但是还是可以用这种方式调用
Console.WriteLine(c.Item1); } //定义一个返回元组的函数
(string, int) stu()
{
return ("tom", );
}
}

十一、结构比较

十二、数组常用的属性方法

数组常用的属性

Length属性表示数组中元素的个数(包括多维数组的个数).

int b=a.Length;  //b=8

数组常用的方法

1、

(13)C#数组的更多相关文章

  1. 剑指Offer 13. 调整数组顺序使奇数位于偶数前面 (数组)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目地址 https ...

  2. 剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

    一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345 ...

  3. Java 13 - Java 数组

    Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如num ...

  4. [剑指Offer] 13.调整数组顺序使奇数位于偶数前面

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. [思路1]用2n ...

  5. 剑指 Offer——13. 调整数组顺序使奇数位于偶数前面

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.这和书本不太一样. 解 ...

  6. 剑指 offer set 13 把数组排成最小的数

    总结 1. 给定 3, 32, 321 将他们组合成最小的数, 比如 321323 2. 3    ->   333 32   ->   322 321 ->   321 然后再排序

  7. 13.调整数组顺序使奇数位于偶数前面 Java

    思路 两次遍历,第一次把奇数加到list中,第二次把偶数加到list中,时间复杂度为O(n). 利用类似于插入排序的方法,但时间复杂度为O(n^2). 代码 import java.util.Arra ...

  8. [技术翻译]您应该知道的13个有用的JavaScript数组技巧

    本次预计翻译三篇文章如下: 01.[译]9个可以让你在2020年成为前端专家的项目 02.[译]预加载响应式图像,从Chrome 73开始实现 03.[译]您应该知道的13个有用的JavaScript ...

  9. 13 个 JS 数组精简技巧

    来自 https://juejin.im/post/5db62f1bf265da4d560906ab 侵删 数组是 JS 最常见的一种数据结构,咱们在开发中也经常用到,在这篇文章中,提供一些小技巧,帮 ...

随机推荐

  1. 【转】Git命令解说

    3.12. Git branch  3.12.1. 总述  当第一次执行git init时,系统就会创建一个名为“master”的分支. 而其它分支则通过手工创建.  下面列举一些常见的分支策略:  ...

  2. 【APUE】Chapter9 Process Relationships

    这一章看的比较混乱,可能是因为例子少:再有就是,这一章就是一个铺垫的章节. 9.2 terminal logins 啥叫termnial? 我感觉书上的terminal指的更可能是一些物理设备(key ...

  3. 收集的java面试题

    1.谈谈final, finally, finalize的区别. final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...

  4. python学习笔记-参数带*

    #!/usr/bin/python # -*- coding: utf-8 -*- def powersum (power,*args): #所有多余的参数都会作为一个元组存储在args中     s ...

  5. SSH非交互式密码授权远程执行脚本

    公司有上百台服务器,需要为每台服务器都执行一个脚本,因为所有服务器的账号密码都是一样的,所以可以不用搭建ansible等自动化运维工具,我们直接通过SSH远程执行即可完成. 本文以三台服务器为例,系统 ...

  6. 【转载】Unity3D研究院之共享材质的巧妙用法(sharedMaterial效率问题)

    如果你需要修改模型材质的颜色,或者是修改材质Shader的一些属性, 通常情况是用获取模型的Renderer组件,然后获取它的material属性. 举个简单的例子,修改颜色或者直接更换shader ...

  7. sources.list

    deb http://debian.ustc.edu.cn/ubuntu/ precise main multiverse restricted universe deb http://debian. ...

  8. CentOS 6.3下安装Vsftp,虚拟用户

    CentOS 6.3下安装Vsftp,虚拟用户一.安装:1.安装Vsftpd服务相关部件:[root@linuxidc.com ~]# yum install vsftpd*Dependencies ...

  9. django QuerySet 的常用API

    为了加深对queryset对象api的了解,我们建立了以下示例模型: from django.db import models class Author(models.Model): "&q ...

  10. 201621123033 《Java程序设计》第8周学习总结

    第八次作业 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 首先调 ...