C#——數(shù)組

關(guān)于數(shù)組,在C#中我們可以創(chuàng)建一維數(shù)組,多維數(shù)組以及交錯數(shù)組。
一維數(shù)組和多維數(shù)組都好理解,交錯數(shù)組是個什么鬼?
其實在前面的隨筆中,我都有寫到,交錯數(shù)組就是一個數(shù)組的成員還是數(shù)組,這樣的數(shù)組叫做交錯數(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][]; //交錯數(shù)組

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

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

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

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

當我們使用new運算符創(chuàng)建一個數(shù)組的時候,整個數(shù)組就已經(jīng)被初始化為默認值了,
比如上述代碼中第一個一維數(shù)組,10個成員全是0,因為int型變量的默認值就是0,如果是string的話,默認值就是null。

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

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

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

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

注意foreach中的那個i并不是指數(shù)組下標,而是指數(shù)組內(nèi)的成員。

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

關(guān)于隱式數(shù)組:
可以創(chuàng)建隱式類型的數(shù)組,在這樣的數(shù)組中,數(shù)組實例的類型是從數(shù)組初始值設(shè)定項中指定的元素推斷而來的。
有關(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"}
                       };            
                 }
            }

注意:上述代碼中,并沒有在等號的左側(cè)使用方括號,這是因為使用var,相當于一種匿名類型
var表示的是一種弱化類型,其可以代替任何類型。
使用var定義變量時有以下四個特點:

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

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

  3. var要求是局部變量。

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容