猫史档案馆


【Cshart】C#初入门 列表的研究1

用户:天上的流星_tianqiVirus天上的流星_tianqiVirus查看:0 回复:0 评论:0 创建时间:2020-07-17T20:20:08


C#初入门

C#学习记录

by 天上的流星

 

我这个帖子既有教程性质,又是对于我复习C#的重要方法

不管有没有人看,我都会每两周更新

 

我这一些时间研究了一下C#的列表,即数组

了解了列表的基本用法

我们此时用python与C#互相解释,比较的方法来讲解

在最开始,我先解释下

如非特别提示,本文以下所有的C#代码都在main主函数内,即:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CsharpStudy_Array2
{
    class Program
    {
        static void Main(string[] args)
        {
            //这里是代码的位置
    
        }
    }  

顺便一提,C#单行注释为在开头加上//,多行注释为开头/*和结尾*/

接下来我们开始

python的列表生成长这样:

List1 = [1,2,3,4,5]

C#的是这样:

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

可见C#列表生成,或者说列表初始化,格式如下

数据类型[] 列表名字 = {元素1,元素2,元素3,......};

特别注意,列表内部元素的数据类型,必须为开头写的数据类型

也就是说,python中的

List1 = [1,2,"hello","codemao"]

在C#中是行不通的

还有一种初始化列表的方式,即

int[] List1 = new int[10];

这指,初始化一个长度为10的整型数组

此时,该代码相当于:

int[] List1 = {0,0,0,0,0,0,0,0,0,0};

因为整型变量初始化值为0

这是普通的整型数组初始化的方式,字符串,浮点数等数据类型同理

接下来,我们来介绍二维数组

python中,二维数组即

List2 = [[1,2],[3,4]]

C#的二维数组:

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

此时,你可以将python的[]理解为C#的{}

同理,此时二维数组也可以通过new初始化,即

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

请注意,这里的int[,]中是有逗号的

就是说int[]中的逗号数量+1就是数组的维度

三位数组,四维数组等同理

接下来来介绍下如何使用数组

数组之使用,与python十分相似

python中一个二维列表,第一行第二列的元素的调用如下

List2 = [[1,2],[3,4]] #这个是生成列表
num = List2[0][1] #这个是调用

C#同样的数组元素调用如下

int[,] List2 = new int[2, 2] { { 1, 2 }, { 3, 4 } }; //生成列表
int num1 = List2[0,1]; //调用元素

两这差别仅在[0][1]和[0,1]上,两者索引都以0开始,即0为第一个,1为第二个

再如,C#中三维数组,第1行第2列第3纵深的元素调用方法为List3[0,1,2]

一维数组第3个元素调用为List3[2]

其他一维数组,高维数组同理

以上就是数组的初始化及使用

如果我的二维数组,是不规则的,如

center_image

那么这种数组声明,就是先创建一个总的数组,然后把三个小数组装进去

如下

int[][] List2 = new int[3][];
List2[0] = new int[3] { 1, 3, 7 };
List2[1] = new int[2] { 2, 8 };
List2[2] = new int[4] { 6, 15, 23, 4 };

值得注意的是,之前二维数组的int[,]变成了int[][]

而调用也产生了变化

如,我要调用List2的第一行的第三个元素,如下

int num1 = List2[0][2];

而非

int num1 = List2[0,2];

而两者是不相通的,两者不能互相代替

和python一样,C#的数组也有长度,也有调用数组指定维度中的上界和下界

先来说说数组的长度,调用数组长度数据如下

int[] List3 = new int[3] { 1, 2, 3 };
int num2 = List3.Length;

注意,长度数据为整型,所以要用整型变量来接受

接下来来介绍下上下界的调用方法

int[] List3 = new int[3] { 1, 2, 3 };
int num2 = List3.GetLowerBound(0);

GetLowerBound方法用处如下

center_image

括号内的参数,是数组指定的维度,在一维数组中一般为0,多维数组另当别论

同理,求上界也是用同样方法,只不过GetLowerBound改为GetUpperBound,即

center_image

所谓下界,就是数组的首元素索引,上界就是尾元素索引

个人感觉上下界目前作用不大,毕竟数组上界就是长度-1嘛

但是可能会在多维数组中发挥作用

因为多维数组难以直接调用某一行,进而难以取得它的长度

此时上界就体现了它的重大作用

如下,调用二维数组第二个维度的上界

int[,] List2 = new int[2, 2] { { 1, 2 }, { 3, 4 } };
int num2 = List2.GetUpperBound(1);

是可行的,而:

int[,] List2 = new int[2, 2] { { 1, 2 }, { 3, 4 } };
int num2 = List2[0].Length;

是不可行的,错在List2[0]

特别注意

之前的这个数组

center_image

这个数组,只是一维数组

所以在这个数组使用GetUpperBound(1)是不可行的

这也是

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

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

不等价

至此,我们可以很清晰地发现C#的列表与python差别巨大

 

这一篇的内容需要长时间理解

这就是C#数组的声明,使用的方式

如有不足,还请大家谅解指出,我必定改正

谢谢大家


回复

上一页1 页 / 共 0下一页