(教學思路 C#數組三)數組的常用方法例題,複習數組

來源:互聯網
上載者:User

    本節我們通過數組的常用方法對數組進行操作,同時留幾道數組的練習題複習數組。

數組的常用方法

     上一節我提到了方法就是對象所具有的功能,一般是動詞,比如抹布清除灰塵,清除就是它的功能,同樣數組也有各種功能方法,比如清空、尋找、排序等,這三個方法是本節的學習重點,我會逐一講解。首先,我們來學習一下

數組的清空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("語文成績全部及格!");
             }

    現在的程式有個問題,就是學號允許重複,而且代碼有點多,主要是讓你們看了簡明扼要,以後再學習雜湊表時可以有效避免這個問題。下一節我們就學習一下動態數組。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.