分享

数组的常用方法例题,复习数组

 贾朋亮博客 2010-12-12

数组的常用方法

     上一节我提到了方法就是对象所具有的功能,一般是动词,比如抹布清除灰尘,清除就是它的功能,同样数组也有各种功能方法,比如清空、查找、排序等,这三个方法是本节的学习重点,我会逐一讲解。首先,我们来学习一下

数组的清空Array.Clear(Arrayname, int  index,  int  length);
          (操作的数组名,起始索引,清除元素的长度)
看下面的例子

            int[] arr = new int[] {1,2,3,4,5};
            foreach (int i in arr)
            {
                Console.WriteLine(i);
            }                              
                Array.Clear(arr, 1, 2); 
             Console.WriteLine(“从1号索引开始清除2个元素后的数组长度"+arr .Length );         
          foreach (int i in arr)
            {
                Console.Write(i+"  ");
            }

提问:同学们想一下结果输出是什么样子的?结果是:从1号索引开始清除2个元素后的数组长度5

                                                                   1  0  0  4  5.  

 而不是1  4  5。原因是什么呢?这是由于数组的特性,数组的大小一旦初始化了就已经确定了,因此数组元素的清空只是将部分元素设置回了0、False或Null,这和数组元素的类型有关,但是数组的长度依然没有变化。

接下来我们来学习一下数组的查找

Array.IndexOf(Array,obj);查找arr数组中第一个出现obj元素的索引
Array.LastIndexOf(arr,obj);查arr找数组中最后一个出现obj元素的索引

           int[] arr = new int[] { 3, 2, 1, 5, 2 ,4};
            foreach (int i in arr)
            {
                Console.WriteLine(i);
            }
            int z=Array.IndexOf(arr, 2);
            int j=Array.LastIndexOf(arr,2);

            Console.Write("第一次出现2的索引位:"+z);
            Console.WriteLine("最后一次出现2的索引位:" +j);

结果是 第一次出现2的索引位:1 最后一次出现2的索引位:4   结果与事实吻合,c#提供的Array.IndexOf和Array.LastIndexOf方法还提供了两种方法:

Array.IndexOf(Array,obj,beginIndex);开始查询的索引位。

Array.IndexOf(Array,obj,beginIndex,count);起始查询的索引位,索引往大的方向累加查询数。

Array.LastIndexOf(Array,obj,beginIndex);开始查询的索引位。

Array.LastIndexOf(Array,obj,beginIndex,count);起始查询的索引位,索引往小的方向累加查询数。

接着上面的例子

            int b = Array.IndexOf(arr, 2, 1, 4);
            int l = Array.LastIndexOf(arr,2,4,4);

            Console.WriteLine("从1号索引位开始的往大的索引数4个元素中第一次出现2的索引位:" + b);
            Console.WriteLine("从4号索引位开始的往小的索引数4个元素中最后一次出现2的索引位:" + l);

运行结果为:

      利用索引查询在实际项目中经常会被使用,比如在网站中编写上传图片时需要判断上传文件的扩展名,就需要用到LastIndexOf("\\")在上传文件 的路径中,查找出索引位后,利用截取方法(在今后的字符串处理章节中将学到)把文件路径中最后一个“\”后的扩展名截取下来,再判断是否为合法图片格式; 还有在网页上显示新闻时,会用才第几个字以后用"……"代替,省略了其后的文字,也是用查找索引位来达到的,同学们一定要掌握这种方法。另外说到这同学们 一定觉得疑惑,存储文件路径或新闻内容时一般是用string类型的变量,不是数组呀,怎么用到索引呢?我要告诉大家,string类型不是值类型,而是 引用类型,可以把string类型的变量看出是char类型的数组,索引string类型的变量可以用到索引。

下面我们来学习一下数组的排序

       在c语言中,排序是利用冒泡原理,这种排序非常的麻烦,而实际应用中会经常应用到数组的排序。C#就提供了用于排序的两种算法:

Array.Sort(arr);用于对一维Array对象中的元素由小到大默认进行排序
Array.Reverse(arr);反转一维arr
Array.Sort(arr,beginIndex,count);用于对一维Array对象部分中的元素进行排序,从beginIndex索引开始,操作count个元素
Array.Reverse(arr,beginIndex,count);反转一维arr或部分arr中元素的顺序,从beginIndex索引开始,操作count个元素

 例:     int[] arr = new int[] { 3, 1, 5, 4, 2 };
            Console.WriteLine("原数组元素顺序:");
            foreach (int i in arr)
            {
                Console.Write(i+"   ");
            }
            Console.WriteLine("");
            Array.Reverse(arr);
            Console.WriteLine("反转数组元素:");
            foreach (int i in arr)
            {
                Console.Write(i + "   ");
            }
            Console.WriteLine("");
            Array.Sort(arr);
            Console.WriteLine("排序后的数组元素:");
            foreach (int i in arr)
            {
                Console.Write(i + "   ");
            }
            Console.WriteLine("");
            Array.Reverse(arr, 2, 2);
            Console.WriteLine("对数组中从第2索引位对2个元素进行逆序排序:");
            foreach (int i in arr)
            {
                Console.Write(i + "   ");
            }
            Console.WriteLine("");

            Array.Sort (arr,2,2);
            Console.WriteLine("对数组中从第2索引位对2个元素进行排序:");
            foreach (int i in arr)
            {
                Console.Write(i + "   ");
            }
            Console.WriteLine("");

结果如下

 

 


 

以上就是数组常用的方法,大家要熟练掌握,下面我通过几道问答题大家一起来回顾一下这3节有关数组的学习。

1.数组用来存储各种类型的数据,想一想数组中的数据内容有几种赋值方式?

答:初始化时可以赋值、根据索引进行赋值。

2.交错数组与一般规则的数组最大的差异是什么?如何遍历交错数组?

答:交错数组是每行中的列都不一定相同的二维数组,遍历元素时需要先变量出行,再在行中遍历出列。

3.声明一个存储A、B、C、D、E等5个英文的数组对象,将其取出合并输出如ABCDE。

4.创建一个二维数组,并且在控制台输出以下内容:

    02  04  06

    08  10  11

    12  14  16

5.利用一个二维数组存储3名同学的语文成绩及数学成绩,提示用户输入学生编号,语文及数学成绩,并将结果显示给用户。并将语文不及格的学生学号显示出来,如果不存在语文不及格的学生,则显示“语文考试全部通过”。
              int[,] cj=new int [3,3];
            int i;
            for (i = 0; i <3;i++ )
            {
                Console.Write("请输入第{0}位学生的学生编号:",i+1);
                cj[i, 0] = Convert.ToInt32(Console.ReadLine());
                Console.Write("请输入此学生的语文成绩:");
               cj[i,1]=Convert .ToInt32 (Console.ReadLine());
                Console.Write("请输入此学生的数学成绩:");
                cj[i,2]=Convert .ToInt32 (Console.ReadLine());
                Console.WriteLine("*********************************");
            }
            for (i = 0; i <3;i++)
            {
                Console.WriteLine("请输出第{0}位学生的学生编号:{1},语文成绩:{2},数学成绩:{3}", i + 1, cj[i,0], cj[i,1], cj[i,2]);
             }
             Console.WriteLine("*********************************");
             bool bj = false ;
             i = 0;
             while (i < 3)
             {
                 if (cj[i, 1] < 60)
                 {
                     Console.WriteLine("不及格学生的学号为:{0}", cj[i, 0]);
                     bj = true;
                 }
                 i++;
             }
             if (bj != true)
             {
                 Console.WriteLine("语文成绩全部及格!");
             }

    现在的程序有个问题,就是学号允许重复,而且代码有点多,主要是让你们看了简明扼要,以后再学习哈希表时可以有效的避免这个问题。下一节我们就学习一下动态数组。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多