(13)C#数组和元组

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

 一、一维数组

1、数组的声明方法

 int [] a;

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

2、创建一个数组实例

a=new int[4];

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

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

3、初始化数组变量

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

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

4、初始化数组简写

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

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

5、创建隐式类型的数组

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

两个语法上的特别地方:

1、等号左边省略的[]

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

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

6、访问数组元素

提取数组元素

int b=a[2];

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

给数组元素重新赋值

int b=6;

a[2]=b;

二、多维数组

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

1、二维数组的声明

int[,] a;

2、二维数组创建实例

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

3、初始化

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

4、简写

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

5、访问数组元素

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

提取二维数组元素

int b = a[2, 1];

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

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

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

三、交错数组

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

1、声明

int [][] a;

2、创建实例

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

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

3、赋值

a[0]=new int[] {1,4,6,8,};

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

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

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

例如

int[][,] a =new int[3][,];
a[0]=new int[,]{{2,9},{3,6}};
a[1] = new int[,] { { 2, 9 }, { 3, 6 }, { 8, 8 } };
a[2] = new int[,] { { 2, 9 } };

 

四、引用类型数组

有一个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[2];

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

per[0] = new Person { a = "李毅", b = "周杰" };
per[1] = 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", 23);
            //调用元组
            Console.WriteLine(b.Item1);//tom
            Console.WriteLine(b.Item2);//23

            //给元组元素定义名称
            var c = (name: "liu", age: 29);
            Console.WriteLine(c.age);//29
            //虽然vs隐藏了Item1,但是还是可以用这种方式调用
            Console.WriteLine(c.Item1);


        }

        //定义一个返回元组的函数
        (string, int) stu()
        {
            return ("tom", 23);
        }
    }

 

十一、结构比较

 

 

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

 数组常用的属性

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

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

数组常用的方法

1、

posted @ 2016-06-24 11:39  富坚老贼  阅读(366)  评论(0编辑  收藏  举报