推 GuiGong:非常感謝 ^^ 03/12 17:29
首先,小弟沒寫過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