C# Array類 【溫故而知新】

來源:互聯網
上載者:User

標籤:c#   c#數組   array   array類   

簡單的數組知識代碼及注釋講解
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;namespace Array類{    class Program    {        static void Main(string[] args)        {            //Array是一個抽象類別,不能使用建構函式來建立數組            //建立數組            Array arr = Array.CreateInstance(typeof(int), 5);//建立類型為int,大小為5的數組。            //設定對應元素的值SetValue()            for (int i = 0; i < 5; i++)            {                arr.SetValue(33, i);            }            //讀取對應元素的值            for (int i = 0; i < 5; i++)            {                Console.WriteLine(arr.GetValue(i));            }            //強制轉化            int[] arrInt = (int[])arr;            //建立多維陣列和不基於0的數組,下面建立一個包含2*3個元素的二維數組。第一維基於1,第二維基於10            int[] lengths = { 2, 3 };            int[] lowerBounds = { 1, 10 };            Array racers = Array.CreateInstance(typeof(Person), lengths, lowerBounds);            racers.SetValue(new Person { FirstName = "aa", LastName = "bb" }, 1, 10);            racers.SetValue(new Person { FirstName = "cc", LastName = "dd" }, 1, 11);            racers.SetValue(new Person { FirstName = "ee", LastName = "ff" }, 1, 12);            racers.SetValue(new Person { FirstName = "gg", LastName = "hh" }, 2, 10);            racers.SetValue(new Person { FirstName = "ii", LastName = "jj" }, 2, 11);            racers.SetValue(new Person { FirstName = "kk", LastName = "ll" }, 2, 12);            //複製數組:            //因為數組是參考型別,所以將一個陣列變數賦予給另一個陣列變數,就會得到兩個引用同一數組的變數。            //而複製數組,會使數組實現ICloneable介面,這個介面定義的Clone()方法會建立數組的淺表副本。            //如果數組的元素是實值型別,以下代碼就會複製所有的值            int[] arrClone = { 1, 2 };            int[] arrClone2 = (int[])arrClone.Clone();            //如果數組包含參考型別,則不複製元素,而複製引用。            Person[] p1 =  {                                   new Person { FirstName="aa", LastName="bb"},                               new Person { FirstName="cc", LastName="dd"}                           };            Person[] p2 = (Person[])p1.Clone();            p2[0] = new Person { FirstName = "ee", LastName = "ff" };            //Clone()與Copy()區別            //1.都是建立淺表副本            //2.Clone()方法建立一個新的數組            //3.Copy()方法必須傳遞階數相同且有足夠元素的已有數組            //Copy()方法            int[] arr1 = { 1, 2, 3, 4 };            int[] arr2 = { 5, 6, 7, 8, 9, 10, 11 };            arr1.CopyTo(arr2, 2);            //淺表副本與深層副本:淺複製就是僅複製類中的實值型別成員            //深複製就是複製類中的實值型別成員和參考型別的成員。            //排序:注意IComparable<Person>介面與IComparer<Person>介面的不同            //(1)            string[] names = { "bb", "ff", "aa", "cc", "ee", "dd" };            Array.Sort(names);            foreach (string name in names)            {                Console.WriteLine(name);            }            //對自訂類數組進行排序,需要實現IComparable介面,            Person[] p3 =  {                                   new Person { FirstName="aa", LastName="bb"},                               new Person { FirstName="cc", LastName="dd"},                               new Person { FirstName="ee", LastName="ff"},                               new Person { FirstName="dd", LastName="dd"}                           };            Array.Sort(p3);            foreach (var p in p3)            {                Console.WriteLine(p.ToString());            }            //(2)            Person[] p4 =  {                                   new Person { FirstName="aa", LastName="bb"},                               new Person { FirstName="cc", LastName="dd"},                               new Person { FirstName="ee", LastName="ff"},                               new Person { FirstName="dd", LastName="dd"}                           };            Array.Sort(p4, new PersonCompare(PersonCompareType.FirstName));            foreach (var p in p3)            {                Console.WriteLine(p.ToString());            }            //數組作為參數            //在方法中返回數組            //static Person[] GetPersons()            //{            //    return new Person[]  {                //                           new Person { FirstName="aa", LastName="bb"},            //                           new Person { FirstName="cc", LastName="dd"},            //                           new Person { FirstName="ee", LastName="ff"},            //                           new Person { FirstName="dd", LastName="dd"}            //                        };            //}            //參數            //static void DisplayPersons(Person[] person)            //{            //}            //數組的協變            //說明:數組支援協變。這表示數組可以聲明為基類,其衍生類別型的元素可以賦予數組元素。            //例如:可以聲明一個object[]類型的參數,給它傳遞一個參數Person[]            //static void DisplayPersons(object[] person)            //{            //}            //ArraySegment<T>            int[] ar1 = { 1, 3, 5, 7, 9 };            int[] ar2 = { 2, 4, 6, 8, 10 };            var segments = new ArraySegment<int>[2]            {                new ArraySegment<int>(ar1,2,3),                 new ArraySegment<int>(ar2,1,4),            };            int sum = SumOfSegments(segments);            Console.ReadKey();        }        static int SumOfSegments(ArraySegment<int>[] segments)        {            int sum = 0;            foreach (var segment in segments)            {                int offset = segment.Offset;                int count = segment.Count;                for (int i = offset; i < offset + count; i++)                {                    sum = sum + segment.Array[i];                }            }            return sum;        }    }    public class Person : IComparable<Person>    {        public string FirstName { get; set; }        public string LastName { get; set; }        public override string ToString()        {            return string.Format("{0},{1}", FirstName, LastName);        }        public int CompareTo(Person other)        {            if (other == null)            {                return 1;            }            int result = string.Compare(this.LastName, other.LastName);            if (result == 0)            {                result = string.Compare(this.FirstName, other.FirstName);            }            return result;        }    }    //排序(2)使用的類    //解釋說明:類PersonCompare實現了IComparable<Person>介面,可以按照FirstName或LastName對Person對象進行排序。    //枚舉PersonCompareType定義了可用於PersonCompare的排序選項:FirstName和LastName。    //排序方式由PersonCompare類的建構函式定義,在該建構函式中設定了一個PersonCompareType值。    //實現Compare()方法時用一個swith語句指定是按FirstName還是LastName排序。    public enum PersonCompareType    {        FirstName,        LastName    }    public class PersonCompare : IComparer<Person>    {        private PersonCompareType compareType;        public PersonCompare(PersonCompareType compareType)        {            this.compareType = compareType;        }        public int Compare(Person x, Person y)        {            if (x == null && y == null) return 0;            if (x == null) return 1;            if (y == null) return -1;            switch (compareType)            {                case PersonCompareType.FirstName:                    return string.Compare(x.FirstName, y.FirstName);                case PersonCompareType.LastName:                    return string.Compare(x.LastName, y.LastName);                default:                    throw new ArgumentException("unexpected compare type");            }        }    }}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.