iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0
自我挑戰組

初心者學C#系列 第 18

Day 18:C#的陣列(下)ᕕ( ᐕ )ᕗ

  • 分享至 

  • xImage
  •  

※以下內容皆是新手撰寫,內容可能不完全正確

可愛表情符號挑戰第18天囉~(遭踹下樓梯((砰
寫這篇的用意是要把上一篇C#陣列的幾個概念講完,內容稍多,於是獨立成一篇了。應用方面沒有講那麼多,主要還是介紹定義和簡單的概念。
這篇要講的五個概念:

  • 多維陣列
  • 不規則陣列
  • 將陣列傳給函數
  • Param陣列
  • Array類別

多維陣列(multidimensional arrays)
C#程式語言支援多維陣列(亦稱作長方陣列),以下是宣告二維陣列(2-dimensional array)跟三維陣列(3-dimensional array)的例子:

string[, ] x; //二維string陣列
int[, , ] y; //三維int陣列

變數名稱喜歡用x、y、z那些,因為本人金魚腦,目前寫比較長的程式碼還會忘記自己把某些變數取啥鬼名字 :D總之,我超爛。
二維陣列是最簡單的多維陣列,可以想成是一連串的一維數列,也可以想成是像九九乘法表那樣,有n行跟m列。
以下是二維陣列的初始化的例子(3列四行):

int[, ] z = new int[3, 4]{
{7,6,5,4},
{0,1,2,3},
{8,9,10,11}
};

獨立出二維陣列中的元素,方法如下(這樣抓出來的是2:

int k = z[1, 2];

不規則陣列(jagged arrays)
不規則陣列的概念是陣列中有陣列,宣告方式如下

int[][] numbers;

跟其他陣列一樣,不規則陣列要先初始化:

int[][] numbers = new int[3][ ]{new int[ ]{1,2}, new int[ ]{3,4,5,6}, new int[ ]{7,8}};

這串看了覺得眼花撩亂的東西是內有三個陣列的陣列numbers,numbers[0]這個陣列有兩個元素,numbers[1]這個陣列有四個元素。學到這裡的時候覺得,難怪隨便寫一寫程式就會跑出bug來,太難避免了(@_@)

將陣列傳給函數(passing arrays to functions)
陣列能作為函數引數:

using System;
namespace Yee {
   class Stuff {
      double a(int[ ] b, int c) {
		//內容
          }

Param陣列(Param arrays)
宣告方法偶爾會遇到一個狀況,就是不曉得有幾個引數(arguments)是參數(parameters),而Param陣列就是這種時候派上用場的,裡面可以放入引數,也可以不要放引數,這樣Param陣列的長度就是0。宣告一個方法只能用一個Param陣列,陣列也只能是一維陣列,否則編譯器會顯示error:

using System;
namespace P {
   class Param {
      public int stuff(params int[] yee) {
		//內容
         }
      }
   }

Array類別(array class)
Array類別是C#中所有陣列的基礎類別,處理陣列基本上就是靠這個Array class,而他有很多不同功能的財產(properties),格式是這樣子的<陣列名稱>.<財產>以下是幾個常用財產:

  • IsFixedSize:判斷陣列是否有固定的值。
  • IsReadOnly:判斷陣列是否只能用看的,不能更改。
  • Length:判斷陣列中所有維度的元素總共有幾個(32-bit integer)。
  • LongLength:判斷陣列中所有維度的元素總共有幾個(64-bit integer)。
  • Rank:可以得到陣列的維度(1D、2D、3D)。
    接著是Array的各種方法,這邊只列其中兩個,畢竟硬背未必對寫程式有幫助,反而是要用的時候去查完整的列表比較實在:
Array.Reverse(a); //將一維陣列a中元素順序全部倒過來
Array.Sort(b); //將一維陣列b中元素照順序排好

目前先這樣了,快暴斃ㄌQwQ,下一回要講的是字串喔~

參考資料:
(a) Tutorialspoint; C# - Arrays
https://www.tutorialspoint.com/csharp/csharp_arrays.htm
(b) Microsoft; Array Class
https://docs.microsoft.com/en-us/dotnet/api/system.array?view=netframework-4.8


上一篇
Day 17:C#的陣列(上)ᕕ( ᐛ )ᕗ
下一篇
Day 19:C#的字串 ♪♪♪ ヽ( ᐖゞ)
系列文
初心者學C#30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言