C#——數(shù)組

關(guān)于數(shù)組纱烘,在C#中我們可以創(chuàng)建一維數(shù)組,多維數(shù)組以及交錯(cuò)數(shù)組祈餐。
一維數(shù)組和多維數(shù)組都好理解擂啥,交錯(cuò)數(shù)組是個(gè)什么鬼?
其實(shí)在前面的隨筆中帆阳,我都有寫到哺壶,交錯(cuò)數(shù)組就是一個(gè)數(shù)組的成員還是數(shù)組,這樣的數(shù)組叫做交錯(cuò)數(shù)組蜒谤。

關(guān)于在C#中數(shù)組的創(chuàng)建:

class ArrayLearn
{

   static void Main(){
       
       int[] array1 = new int[10]; //一維數(shù)組
       
       int[] array2 = new int[] {1,2,3}; // 一維數(shù)組山宾,并且初始化
       
       int[] array3 = {1,2,5,7,8}; //另一種初始化的一維數(shù)組
       
       int[,] mArray1 = new int[2,5]; //二維數(shù)組
       
       int[,] mArray2 = { {1,5,7},{8,6,10,2} }; //二維數(shù)組初始化
       
       int[][] jArray1 = new int[2][]; //交錯(cuò)數(shù)組

       jArray1[0] = new int[3]{1,5,7};
       
   }
}

C#中數(shù)組的一些需要注意的地方:

  • 當(dāng)創(chuàng)建了數(shù)組實(shí)例時(shí),將建立維度數(shù)和每個(gè)維度的長度鳍徽。 在實(shí)例的生存期內(nèi)资锰,這些值不能更改。
  • 數(shù)值數(shù)組元素的默認(rèn)值設(shè)置為零阶祭,而引用元素的默認(rèn)值設(shè)置為 null绷杜。
  • 交錯(cuò)數(shù)組是數(shù)組的數(shù)組,因此其元素是引用類型并初始化為 null濒募。
  • 數(shù)組元素可以是任何類型鞭盟,包括數(shù)組類型。
  • 數(shù)組類型是從抽象基類型 Array 派生的引用類型瑰剃。 由于此類型實(shí)現(xiàn)了 IEnumerable 和 IEnumerable<T>(迭代器)齿诉,因此可以對 C# 中的所有數(shù)組使用 foreach 迭代。

在C#中晌姚,數(shù)組不同于C或者C++里的那樣是一片可尋址的連續(xù)內(nèi)存區(qū)域粤剧,而是一個(gè)對象。
Array類是所有數(shù)組類型的抽象基類型舀凛,所以俊扳,我們可以使用其屬性以及一些方法。
Array類提供了許多有用的屬性和方法猛遍,比如Length,Rank等等号坡。

當(dāng)我們使用new運(yùn)算符創(chuàng)建一個(gè)數(shù)組的時(shí)候懊烤,整個(gè)數(shù)組就已經(jīng)被初始化為默認(rèn)值了,
比如上述代碼中第一個(gè)一維數(shù)組逃沿,10個(gè)成員全是0应闯,因?yàn)閕nt型變量的默認(rèn)值就是0陶珠,如果是string的話,默認(rèn)值就是null壁肋。

對于創(chuàng)建的一個(gè)數(shù)組是值類型還是引用類型号胚,就要看申明的類型了,
比如:Type[] array = new Type[10];
該語句的結(jié)果取決于 Type 是值類型還是引用類型浸遗。 如果為值類型猫胁,則語句將創(chuàng)建一個(gè)有 10 個(gè)元素的數(shù)組,每個(gè)元素都有 Type 類型跛锌。 如果 Type 是引用類型弃秆,則該語句將創(chuàng)建一個(gè)由 10 個(gè)元素組成的數(shù)組,其中每個(gè)元素都初始化為空引用髓帽。

對于多維數(shù)組聲明以及初始化:
你可以這樣:
int [菠赚,] array = { {1 , 2} , {3 , 4} };
但是如果你先聲明:int [ , ] array1;
然后再去初始化:array1 = new int [ , ] { {1 , 2} , {3 , 4} }; //對的
注意:你不能這樣:array1 = { {1 , 2} , {3 , 4} };//錯(cuò)誤

我們可以針對數(shù)組或者集合等,用foreach來進(jìn)行循環(huán)遍歷
比如:

int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 }; 
foreach (int i in numbers) 
{ 
      System.Console.Write("{0} ", i); 
}

注意foreach中的那個(gè)i并不是指數(shù)組下標(biāo)郑藏,而是指數(shù)組內(nèi)的成員衡查。

當(dāng)我們將數(shù)組作為參數(shù)傳遞進(jìn)方法的時(shí)候,其實(shí)和正常的參數(shù)傳遞是一樣的使用方法必盖。
對于out和ref關(guān)鍵字的運(yùn)用峡捡,也是一樣的。
如果用out關(guān)鍵字筑悴,那么可以不必對數(shù)組進(jìn)行初始化们拙,但是在方法體結(jié)束之間一定要對數(shù)組參數(shù)進(jìn)行初始化。
如果用ref關(guān)鍵字阁吝,那么必須在參數(shù)傳遞之前將其進(jìn)行初始化砚婆。

關(guān)于隱式數(shù)組:
可以創(chuàng)建隱式類型的數(shù)組,在這樣的數(shù)組中突勇,數(shù)組實(shí)例的類型是從數(shù)組初始值設(shè)定項(xiàng)中指定的元素推斷而來的装盯。
有關(guān)任何隱式類型變量的規(guī)則也適用于隱式類型的數(shù)組。

 public class ImplicitlyTypedArraySample
          
        {
 
                static void Main()
                {
                    var a = new[] { 1, 10, 100, 1000 }; // int[]
                    var b = new[] { "hello", null, "world" }; // string[]
                    // single-dimension jagged array
                    var c = new[]   
                        {  
                                new[]{1,2,3,4},
                               new[]{5,6,7,8}
                        };
                    // jagged array of strings
                    var d = new[]   
                       {
                             new[]{"Luca", "Mads", "Luke", "Dinesh"},
                            new[]{"Karen", "Suma", "Frances"}
                       };            
                 }
            }

注意:上述代碼中甲馋,并沒有在等號(hào)的左側(cè)使用方括號(hào)埂奈,這是因?yàn)槭褂胿ar,相當(dāng)于一種匿名類型
var表示的是一種弱化類型定躏,其可以代替任何類型账磺。
使用var定義變量時(shí)有以下四個(gè)特點(diǎn):

  1. 必須在定義時(shí)初始化。也就是必須是var s = “abcd”形式痊远,而不能是如下形式: var s; s = “abcd”;

  2. 一但初始化完成垮抗,就不能再給變量賦與初始化值類型不同的值了。

  3. var要求是局部變量碧聪。

  4. 使用var定義變量和object不同冒版,它在效率上和使用強(qiáng)類型方式定義變量完全一樣。

OK逞姿,關(guān)于數(shù)組的基礎(chǔ)知識(shí)就記錄到這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辞嗡,一起剝皮案震驚了整個(gè)濱河市捆等,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌续室,老刑警劉巖栋烤,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猎贴,居然都是意外死亡班缎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門她渴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來达址,“玉大人,你說我怎么就攤上這事趁耗〕吝耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵苛败,是天一觀的道長满葛。 經(jīng)常有香客問我,道長罢屈,這世上最難降的妖魔是什么嘀韧? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮缠捌,結(jié)果婚禮上锄贷,老公的妹妹穿的比我還像新娘。我一直安慰自己曼月,他們只是感情好谊却,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哑芹,像睡著了一般炎辨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上聪姿,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天碴萧,我揣著相機(jī)與錄音,去河邊找鬼咳燕。 笑死勿决,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的招盲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嘉冒,長吁一口氣:“原來是場噩夢啊……” “哼曹货!你這毒婦竟也來了咆繁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顶籽,失蹤者是張志新(化名)和其女友劉穎玩般,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礼饱,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坏为,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镊绪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匀伏。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蝴韭,靈堂內(nèi)的尸體忽然破棺而出够颠,到底是詐尸還是另有隱情,我是刑警寧澤榄鉴,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布履磨,位于F島的核電站,受9級(jí)特大地震影響庆尘,放射性物質(zhì)發(fā)生泄漏剃诅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一驶忌、第九天 我趴在偏房一處隱蔽的房頂上張望矛辕。 院中可真熱鬧,春花似錦位岔、人聲如沸如筛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杨刨。三九已至,卻和暖如春擦剑,著一層夾襖步出監(jiān)牢的瞬間妖胀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工惠勒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赚抡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓纠屋,卻偏偏與公主長得像涂臣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容