iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1
Modern Web

C#與ASP.Net入門-我要成為工程師!!系列 第 17

Day17-C#陣列Array、不規則陣列。神啊~我找到處理多筆資料的好朋友了!

程式中一個變數只能儲存一個資料,那如果需要用到大量而且性質相同的變數時,例如100個學生成績,光是想變數名稱心就覺得累(。ŏ_ŏ)....

於是陣列就以閃閃發亮的姿態出現了!!!!!

陣列使用目的與時機

  • 目的
    • 減少變數個數,減少程式複雜度
    • 可配合迴圈來處理大量資料
  • 時機
    • 當程式需要使用大量同性質的資料時

C#陣列簡介

1.陣列Array是多個相同資料型別的變數,在記憶體中連續串在一起的物件,需用new進行建立物件及宣告
2.宣告時由於是要跟電腦要一串連續的記憶體空間陣列大小是固定的
3.C#陣列可以是一維、多維、不規則
4.宣告方法
資料型別 [ ] 陣列名稱 = new 資料型別[陣列大小]

範例:
    1.宣告一個含有五個陣列元素的整數陣列
    int[] score = new int[5]
    2.宣告一個二維陣列4\*5,含有20個陣列元素的字串陣列
    string[,] name= new string[3,4]

5.圖示陣列

  • 一維陣列
    陣列註標為>=0的整數,從0開始。A[0]=A陣列的第一個元素,A[1]為第二個元素,以此類推

https://ithelp.ithome.com.tw/upload/images/20190918/2012005506WXgKlKhd.png

  • 二維陣列

https://ithelp.ithome.com.tw/upload/images/20190917/20120055l4qt1BtK89.png

6.陣列名稱裡存的不是資料本身,而是陣列的起始位置

7.因為是連續記憶體,陣列讀值的速度是快的。當要加東西進去既有陣列時,由於陣列大小固定不可變動,所以必須把原有的陣列(記憶體)砍掉,重新建立一個新的陣列(新的連續記憶體),效能較差


陣列初始化

  • 無初始值:資料型別 [ ] 陣列名稱 = new 資料型別[陣列大小]

  • 有初始值:
    初始值,外面以大括號包住,中間以逗號隔開。

    • 一維陣列

      • 單獨給一個值:

        a[2]=50;

        a陣列第3個數字為50

      • 宣告整個陣列:

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

        a陣列大小為5,裡面的值依序是1,2,3,4,5

    • 二維陣列

      • 單獨給一個值:

        a[0,0]=10;

        a陣列[0,0]位置的值是10

      • 宣告整個陣列:

        int[,] a= new int[]{{1,2,3,4},{5,6,7,8},{9,10,11,12}}


陣列常用屬性及方法

Int[] a = new int[3];
Int[,] b= new int[2,3]

覺得使用IT邦幫忙的Markdown語法一直無法控制它 = =還是在PPT做好貼上來好了= =

https://ithelp.ithome.com.tw/upload/images/20190917/20120055uDtyaHKLUE.png

.NET Framework 提供了System.Array類別的靜態方法來比較輕鬆的解決陣列排序、反轉、搜尋等問題,下表是Array類別常用的靜態方法
https://ithelp.ithome.com.tw/upload/images/20190917/20120055vQqNuT3RcL.png


不規則陣列(Jagged Array)

C# 有提供不規則陣列(二維)的寫法,也就是陣列中可以存放陣列,每一列的長度可以不同,也稱為非矩形陣列。

宣告方法:

資料型別[ ][ ]陣列名稱 = new 資料型別[陣列大小][ ]

範例:
1.宣告一個不規則陣列,此不規則陣列含有3列
int[][] jag=new int[3][];
2.設定每個陣列大小
jag[0]= new int[3];//第一列陣列大小為3
jag[1]= new int[2];//第二列陣列大小為2
jag[2]= new int[4];//第三列陣列大小為4

圖示:

https://ithelp.ithome.com.tw/upload/images/20190917/20120055vOsa9GwPt8.png


題目練習

題目內容:
輸入10個數字,求10個數字的計算平均值。

double[] a = new double[10];//宣告一個長度為10的陣列
Console.WriteLine("計算平均值請輸入10個數字");
for (int i = 0; i < 10; i++) 
{
    double x = Convert.ToDouble(Console.ReadLine());
	//讀10次數字並存入陣列
	a[i] = x;
}
Console.WriteLine($"平均值為{a.Average()}");//取平均值
Console.ReadKey();


參考資料

本文範例及內容參考至Visual C# 2017程式設計經典


上一篇
Day16-C#- while與do..while(例:求因數、求最大公因數、怎麼讓console重複執行?)
下一篇
Day18-C#-最常用的陣列!處理字串的一百種方法~(組合、切割、取代、擷取、尋找、修改)
系列文
C#與ASP.Net入門-我要成為工程師!!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
annajhan
iT邦新手 5 級 ‧ 2021-08-24 12:43:04

感謝大大分享~我是剛學程式語言的新手~~~
想請問~為何輸入10個數字後run不出來?
(比對了好幾次><....是輸入的問題嗎?

0
TOM
iT邦新手 5 級 ‧ 2023-04-06 13:43:13

實測文章中C#二維陣列的宣告過程出現以下問題
int[,] a= new int[]{{1,2,3,4},{5,6,7,8},{9,10,11,12}} //此方式無法正常編譯

修改以下方式正常編譯
int[,] a= new int[,]{{1,2,3,4},{5,6,7,8},{9,10,11,12}}
或是
int[,] a= {{1,2,3,4},{5,6,7,8},{9,10,11,12}}

0
essc102
iT邦新手 5 級 ‧ 2023-05-26 01:45:23

不好意思,想請問如果用不規則陣列的二維寫法,然後測維度,顯示1是為什麼呢?

我要留言

立即登入留言