看板 C_Sharp 關於我們 聯絡資訊
首先,小弟沒寫過Matlab,所以GuiGong大的Matlab code,我看不懂 再者,您提到資料是從資料庫讀出來的,但是您沒附上資料表欄位定義的型別 所以我假設分數的欄位都是integer ※ 引述《GuiGong ()》之銘言: : DataTable dt = new DataTable(); : dt.Columns.Add("StudentNo"); : dt.Columns.Add("StudentName"); : dt.Columns.Add("Math"); : dt.Columns.Add("English"); : dt.Columns.Add("Chinese"); : dt.Columns.Add("Average"); : dt.Rows.Add(new object[] { 1, "小明", 60, 75, 90 }); : dt.Rows.Add(new object[] { 2, "大黑", 55, 96, 88 }); : dt.Rows.Add(new object[] { 3, "小美", 70, 76, 55 }); : dt.Rows.Add(new object[] { 4, "大黃", 75, 75, 80 }); : dt.Rows.Add(new object[] { 5, "小林", 80, 65, 87 }); : dt.Rows.Add(new object[] { 6, "大李", 70, 50, 70 }); 所以在分數的地方,我覺得你可以直接宣告一個int的二維陣列 (先假設你知道自己要讀幾筆資料,所以二維陣列的空間可以宣告) 則dt的地方,就可以改成 dt.Rows.Add(new object[] {1, "小明" }); ... ... : for (int i=0; i <= dt.Rows.Count-1; i++) : { : dt.Rows[i][5] =( Convert.ToInt32(dt.Rows[i][2]) : + Convert.ToInt32(dt.Rows[i][3]) + Convert.ToInt32(dt.Rows[i][4]))/3; : } : return dt; 這個地方,因為直接對dt操作,你要將型別轉成string存入,遇到要運算的時候, 還要轉換型別來操作,效率無論如何,都會慢點。 所以,接著利用剛剛的二維陣列, 一邊讀出數字寫到dt中,一邊算好平均,寫入dt。 分析: 1. 將資料庫的integer型態直接存成int的矩陣,減少型態轉換 (這句話很有問題,因為我不知道資料庫資料讀過來, 是不是不需要做轉換,請有經驗的人說明) 2. int的二維矩陣,佔用的記憶體空間,會比dt小一點, 運算時,也不用一直做型態轉換。 疑問: dt.Rows[i][5] = (Convert.ToInt32(dt.Rows[i][2]) + Convert.ToInt32(dt.Rows[i][3]) + Convert.ToInt32(dt.Rows[i][4]))/3; 三個整數相加之後,除以三,這樣小數位數應該會很亂吧, 可能需要再調整一下喔~。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.72.161
GuiGong:非常感謝 ^^ 03/12 17:29