發表文章

目前顯示的是 2月, 2010的文章

Array與List

陣列Array是個大家非常常用的變數型態。但是,他的操作並不是太多。如果你想要用在學校學到的資料結構的Add, Remove, Insert, Sort等等的方式。Array並沒有提供。但是,在C#裡面有提供了一個List型態。就可以達成這些功能。 首先,先說一下Array與List之間的互換。 Array連結至List: int[] a = int[5] {5,3,4,1,2}; List list_a=new List (a); List變回到a Array的部分,可以用 a=list_a.ToArray(); 所以,可以先把Array變到List, List操作完再變回Array即可。比如說: int[] a = int[5] {5,3,4,1,2}; List list_a=new List (a); list_a.Add(10); a=list_a.ToArray(); //a變成int[6] {5,3,4,1,2,10} list_a.Remove(1);//移除數字為1的項目 a=list_a.ToArray(); //a變成int[5] {5,3,4,2,10} list_a.Insert(3,8);//在Index 3裡面加入值為8的數字 a=list_a.ToArray(); //a變成int[6] {5,3,4,8,2,10} list_a.Sort(); a=list_a.ToArray(); //a變成int[6] {2,3,4,5,8,10} List也可以對應到多維不規則陣列: int[] p1 = new int[4] { 4, 1, 2, 3 }; int[] p2 = new int[6] { 5, 3, 1, 2, 8, 9 }; List myList = new List (); myList.Add(p1); myList.Add(p2); int[][] p1p2 = myList.ToArray();

Read INI file

以下的程式,是copy別人的source code, 由於copy的時候未將網站記錄下來,已經有些久遠了,在此特別註記!! 利用.ini檔可以動態的在程式中設定一些東西。可以很彈性的使用。無須客戶或是外在的一點點小改變就必須重新更新程式。以下是我的source file, 有興趣的可以參考。程式語言是用C#。 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; public class ReadINI { [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); private bool bDisposed = false; private string _FilePath = string.Empty; public string FilePath { get { if (_FilePath == null) return string.Empty; else return _FilePath; } set { if

多維陣列的Resize

圖片
在不規則的多維陣列中,每個陣列其實是各自獨立。所以Resize也是會各自的分開各自處理。比如說下面的一個例子: int[][] myJaggedArray = { new int[] { 2, 3, 4 }, new int[] { 13, 23 } }; 如果說myJaggedArray[0]的Length由3要改為4, myJaggedArray[1]的Length由2改為1。 Array.Resize(ref myJaggedArray[0], 4); Array.Resize(ref myJaggedArray[1], 1); 結果會變成 myJaggedArray[0]變成{ 2, 3, 4, 0 } myJaggedArray[1]變成{ 13 } 但是規則的多維陣列中,整個陣列可以說是一體的。 因為這種的陣列,並無法用Array.Resize這個方法來進行。所以很多網路上的作法是利用Array.Copy進行。比如像下方的程式段: int[,] myArray = new int[2, 3] { { 2, 3, 4 }, { 13, 23, 33 } }; myResize1(ref myArray, 3, 4); private void myResize1(ref int[,] changeArray, int rank0, int rank1) { int s_rank0 = changeArray.GetLength(0); int s_rank1 = changeArray.GetLength(1); int[,] array2 = new int[rank0, rank1]; Array.Copy(changeArray, array2, s_rank0 * s_rank1); changeArray = array2; } 最後的結果會變成 myArray[3, 4]= { { 2, 3, 4, 13 }, { 23, 33,