怎樣改進算法,提高程式的性能?
简叔 2003-10-18 04:08:00 下面是我求 WinForm DataGrid 中某一個 Column 中值的眾數,但是資料筆數多時下面的程式就非常的慢,請高手指點,改進一下算法:
public string GetMode(System.Windows.Forms.DataGrid dataGrid)
{
System.Data.DataSet dataSet = (System.Data.DataSet)dataGrid.DataSource;
System.Data.DataTable dataTable = dataSet.Tables[dataGrid.DataMember];
System.Collections.SortedList sortedList = new SortedList();
int columnIndex = dataGrid.CurrentCell.ColumnNumber;
for (int i=0;i<dataTable.Rows.Count;i++)
{
string cellText = dataTable.Rows[i].ItemArray[columnIndex].ToString();
if (sortedList.Count == 0)
{
sortedList.Add(cellText,1);
}
else
{
for(int j=0; j<sortedList.Count;j++)
{
if (sortedList.GetKey(j).ToString() == cellText)
{
sortedList.SetByIndex(j,(object)((int)sortedList.GetByIndex(j)+1));
}
else
{
//sortedList.Add(cellText,0);
try
{
sortedList.Add(cellText,0);
}
catch(Exception e)
{
/* 類型 'System.ArgumentException' 的未處理例外狀況發生於 mscorlib.dll
* 其他資訊: 已經加入項目。字典中的索引鍵: "E" 加入的索引鍵: "E"
*
*/
}
}
}
}
}
int val = (int)sortedList.GetByIndex(0);
string key = (string)sortedList.GetKey(0);
for(int i = 1; i<sortedList.Count; i++)
{
if ((int)sortedList.GetByIndex(i) > val)
{
key = (string)sortedList.GetKey(i);
}
}
return key;
}