作者dna2me (低调)
看板C_Sharp
标题Re: [问题] 阵列的计算
时间Thu Jan 14 00:58:06 2010
首先,小弟没写过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
1F:推 GuiGong:非常感谢 ^^ 03/12 17:29