C#数组的问题

作者&投稿:平倩 (若有异议请与网页底部的电邮联系)
c#数组问题~

额...有几个月没有来答题了 = =
楼主,你的问题是: a,b,c,d,e 5个变量 ,然后想定义一个数组,存储4个这样类似的变量(汗,楼主,你的语言描述能力,真的可以堪比哲学家了,说的话,让入先想半天 = =)
废话不多说,我要答题了 o(* ̄︶ ̄*)o (曾经我回答问题时,都是这么先“啰嗦”个几句,不要见怪哈)
额,因为我可能没有理解的说的话(可能是我理解能力太差),你是让我定义5个变量(a,b,c,d,e),还是定义15个变量(a1,a2,a3,......,e5)
我只能单独实现第一个了(不要见怪 o(* ̄︶ ̄*)o)
我的变量命令格式,楼主你可不要学(a,b,c,d...)在工作中,这种命令格式被称为“无法理解”的小捣蛋 = =
、//第一种实现方式
//定义一个二维数组 int a = 1, b = 2, c = 3, d = 4, e = 5; int[] Temp = { a, b, c, d, e }; int[,] sTemp = { { a, b, c, d, e }, { a, b, c, d, e },{ a, b, c, d, e }, { a, b, c, d, e }}; for (int i = 0; i < sTemp.GetLength(0); i++) { for (int j = 0; j < sTemp.GetLength(1); j++) { sTemp[i, j] = 10; } } for (int i = 0; i < sTemp.GetLength(0); i++) { for (int j = 0; j < sTemp.GetLength(1); j++) { Console.Write( sTemp[i, j].ToString()+" "); } Console.Write("
"); } Console.Read();第二种方式(利用高效率的数据结构 列表 List)
//定义一个List int a = 1, b = 2, c = 3, d = 4, e = 5; int[] Temp = { a, b, c, d, e }; List nList = new List() { Temp, Temp, Temp, Temp }; foreach (var i in nList) { for (int j = 0; j < Temp.Length; j++) { i[j] = 10; } } foreach (var i in nList) { for (int j = 0; j < Temp.Length; j++) { Console.Write(i[j].ToString()+" "); } Console.Write("
"); } Console.Read();大概思路就是这个样子吧 = =
如有疑问,请您追问!
FSP
ASV大宝

//你的数据长度不确定就改用ArrayList动态数组或List队列int[] inta=new int[5]{1,3,5,7,9};List intb=new List();for(int i=0;ip==i).Count()==0)//判断该数是否在inta数组中 { //如果不在则加入intb intb.Add(i); }}

shapes是一个数组,它有几个元素,它的元素也是数组

本人对double有偏见,所以换用int
用我自己的代码帮你解释吧

int[]i0=new int[]{321};
int[]i1=new int[]{321,654};
int[]i2=new int[]{321,654,987};

int[][]shapes=new int[3][];
shapes[0]=i0;//从这样的存取方式看来,iis也是个一维数组
shapes[1]=i1;
shapes[2]=i2;
shapes其实是一个一维数组,它里面存放的元素也是数组,例如,在这里shapes[2].Length就和i2.Length一样是3
而shapes[2]所存取到的事实上也就是i2,那么shapes[2][2]所存取到的就是i2的第(2+1)个元素

shapes
+-i0--{321}
+-i1--{321,654}
+-i2--{321,654,987}
上面这个图表示了shapes,shapes是一个一维数组,它有三个元素,那三个元素的值分别是i0,i1,i2,而i0,i1,i2自己也是数组
shapes[0]通过这个样子存取到的是shapes的第一个元素,首先就告诉你了,shapes的元素也是数组,所以shapes[0]=i0这个语句是合法的,因为shapes[0]是一个int数组,而i0也是一个int数组,就是这么回事儿~
所以经过我上面那几行代码之后
Console.WriteLine(shapes[2].Length);
这句代码会输出3,也就是i2的长度(i2有3个元素嘛!)
当然,在这句代码之后:int[][]shapes=new int[3][];
你可不能直接使用shapes[0]~shapes[2]呀,因为shapes那三个元素的值还没有被初始化,还是null,你如果使用了那个为null的元素,就会导致程序发出异常
另外,在声明上面shapes那种数组的时候,还有几点要注意
int[][][]isss=new int[3][][];
这样声明也是可以的,或者说,"[]"的个数可以无限多
对于上面声明的isss,它是一个一维数组,它的每个元素也应该是一个一维数组,而且它的元素所拥有的元素也是一维数组
你也知道,数组的长度不可以改变,所以我们在使用new声明的时候,要么你使用大扩号把它的元素一个一个都弄清楚了,否则你就得把数组的大小给规定好
int[]iss=new int[];//错误,没有设定大小
int[]it=new int[321];//OK
int[]asd=new int[]{321,654};//正确,因为使用大扩号把每个元素都初始化了,那么asd的长度为2
int[]asdf=new int[2]{321,654};//OK,两个一起来,只要前后对称就行
int[][]aa=new int[][];//错,没规定大小
int[][]aaa=new int[36][];//OK
int[][]aaaa=new int[][3];//错误,aaaa是一维数组,应该在第一个[]中规定它的大小

上面说的是一维数组,现在跟你说说多维数组
int[,]a=new int[2,3];
上面声明的就是一个2*3的二维矩型数组,在存取它的值的时候:a[x,y]=***;***=a[x,y];
声明n维数组,那么[]里就应该有n-1个",",而在使用new初始化之的时候,你必须对它的每一个维的大小全部都制定,例如这样的声明就是错误的:
int[,,]aa=new int[3,2,];//只规定了两个维的大小,还有一个维的大小没有规定

现在,我先声明一个2维数组:
int[,]ars=new int[5,6];
如果看不到上面这个句子,我们如何知道ars第1\2维的长度呢?ars.Length吗?不对,ars.Length返回的是它的总长度,是5*6=30,要取得第n+1维的长度,可以这样做:
ars.GetLength(int n);这个方法返回的就是第n维的长度啦,例如:
int len2=ars.GetLength(1);//len2=6,这里返回的是第二维的长度,而如果用ars.GetLength(0);则会返回第一维的长度,因为它是以0为基准进行计量的,跟数组的下标规则一样

我想他的本意应当是:
为(doouble **)指针shapes分配四个指向double型的指针空间。
然后为每个指针分配一个数组,并初始化。
[shapes]-->[ ][ ][ ][ ]//这里每个框内空间是sizeof(double*)
|
[ ]//这里每个框内空间是sizeof(double)
[ ][ ][ ][ ]
[ ][ ][ ]
[ ][ ][ ][ ][ ]

double [][]shapes=new double[4][]; //建立一个二维数组指针, 其中每个指针单元指向的都是一个二维数组
shapes[0]=new double[1]{10};//圆 , 上面二维数组指针的第一个数组单元是一个二维数组
shapes[1]=new double[4]{3,4,3,4};//四边形 , 第一行二维数组指针的第二个数组单元是一个二维数组
shapes[2]=new double[3]{3,4,5};//三角形 , 第一行二维数组指针的第三个数组单元是一个二维数组
shapes[3]=new double[5]{5,5,5,5,5}; 五边形, 第一行二维数组指针的第四个数组单元是一个二维数组

至于{5,5,5,5,5}, 是其中一维的显式赋值,隐式指定一维数组的大小.

你好,我在这里做一下初步的简单的回答,上面两位大概是学c或c++的,一些解释不太准确,这种结构是c#中新加入的,叫做锯齿形数组(jaggered array),不是一般的二维数组,这种数组的特点在于各行元素的个数不一定相同。所以声明和赋值操作就不同了,在c#语言中,是没有指针的,取尔代之的是句柄,句柄你可以把它当作一种指针看,但是它不是指针。句柄是一种很有价值的技术,但是学语言的时候理解不了它的作用的,只有有过c++开发应用才会有更深的理解。另外补充一点在c#中,二维数组声明时用的[,]语法格式。我不知道你明白多少,有问题再问我,我不知道你的基础,说了过多了。

C#中定义数组与C++不同
C++
int a[100][100];

而C#
int[][] a;
若制定大小
int[][] a=new a[100][100];

double [][]shapes=new double[4][];
//声明一个4行n列的double型shapes二维数组
shapes[1]=new double[4]{3,4,3,4};//四边形
//声明数组shapes的第1行为一个含有4个元素的double
//一维数组并对其赋值分别为3,4,3,4
//其余相同


讷河市13950216279: C# 使用数组的问题 -
戈飞今君: 数组,数组,顾名思义,把相同数据类型的元素按一定顺序排列的集合(【组】),用【数】字编号来区分它们.用字符编号(其实大多数字符都不能算做编号,编号为小明、小红的,人能理解,计算机理解不了)的按照这个定义应该叫“字组”了.想实现你想要的类似的功能,可以使用 HashTable,而非数组.

讷河市13950216279: c#中数组问题 -
戈飞今君: 你码看不太清楚,大概看你报错的行是 Console.Write("{0}",r[i]); 这个肯定是错的,因为上面循环的时候,i最后会+1,就是i的值是10,就成了 r[10] ,就是数组中的第11个数,所以超出索引了.你这行的目的是什么呢?如果输出最大数就直接把 r[i] 换成 max 就行了.或者你把这行删除就可以看到你要的结果了.看其它代码应该问题不大.

讷河市13950216279: C#中的数组的问题 -
戈飞今君: 对LZ问题补充理解的一点看法:你应该这样理解,animal数组之所以可以放入cow和chiken对象,是因为它们都是animal类的派生类,但是!!!当他们放入animal对象数组时,你要想象他们不再是cow和chiken了,已经失去了特有的属性和方法...

讷河市13950216279: C# 简单的数组问题 -
戈飞今君: 声明成静态的就可以了.namespace ConsoleApplication1 { class Program { static void Main(string[] args) { foreach (string user in Test.Users) { Console.WriteLine(user); } } } public class Test { public static string[] Users = { "a","b","c"}; } }

讷河市13950216279: C#中数组的问题
戈飞今君:static void Main(string[] args) { int[] n = new int[] { 1, 2, 3, 4, 5, 6, 1, 2, 1 ,5}; Console.Write("请输入一个数: "); int input = Convert.ToInt32(Console.ReadLine()); int count = 0; foreach (int i in n) { if (i == input) { count++; } } Console.WriteLine("个数: " + count.ToString()); Console.ReadKey(); }

讷河市13950216279: C# 关于数组的疑问
戈飞今君: 这样写:string[] xia = {"游戏","软件","音乐"}; 默认是声明,并实例化为一个字符串长度为3的数组. 这样写:string[] xia;这样写只是声明 xia = {"游戏","软件","音乐"}; 你想实例化数组,但是在c#上没有这样的语法. 实现分步实例化 需要这么些 xia = new string[]{"游戏","软件","音乐"}; 或 xia = new string[3]{"游戏","软件","音乐"};

讷河市13950216279: c#中数组问题
戈飞今君: int a[]=new int[]{1,2,3,4,5,6,8}; int b[]=new int[]{1,5,10,20,6,13}; int c[]=new int[b.Length]; int k=0; for(int i=0;i<b.Length;i++){if(!a.Contains(b[i]))c[k++]=b[i]; } Array.Resize(ref c,k); //调C的长度

讷河市13950216279: 关于c#中定义数组的问题 -
戈飞今君: 不使用new时,就在使用时,对这个数组进行赋值了,则可以用,如果没有赋值去引用的话,则是通不过的,这时,可以使用new,给数组先分配个空间,这样就以引用回填值等等,个人平时积累,只是分享,不带学术性.

讷河市13950216279: c#数组问题 -
戈飞今君: convert.toInt32和int.parse都行

讷河市13950216279: 菜鸟级提问!C#数组问题
戈飞今君: 这个问题我知道!arr.count()本意是获取当前数组中元素的个数 但是在count里面有一个lambabel表达式, 这个表达式的意思是. 在获取数组中元素的个数的基础个多加一了一个条件就是“在数组里到底有多少个arry[i]这个元素存在”

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网