从哈希表中删除重复的行

时间:2012-10-22 11:48:39

标签: c# datatable key duplicates hashtable

您好我有一个网格,其中包含了他们参与的教育课程的用户结果。对于每个用户,他们有自己的网格,向他们展示他们已经完成的每个课程以及他们每次尝试的状态。课程。例如:

CourseTitle |状态
Excel,不完整
肢体语言,完整
肢体语言,被遗弃的 肢体语言,不完整的 肢体语言,已完成
肢体语言,已完成

删除重复项后,表格应如下所示:

CourseTitle |状态
Excel,不完整
肢体语言,完整
肢体语言,被遗弃的 肢体语言,不完整

我试图这样做:

public static DataTable RemoveDuplicateRows(DataTable dTable,string colName,string colTitle)     {         Hashtable hTable = new Hashtable();         ArrayList duplicateList = new ArrayList();

    foreach (DataRow drow in dTable.Rows)
    {

        if (hTable.Contains(drow[colName]) && hTable.Contains(drow[colTitle]))
        {
            duplicateList.Add(drow);
        }
        else
            hTable.Add(drow[colName], drow[colTitle]);
    }

    foreach (DataRow dRow in duplicateList)
        dTable.Rows.Remove(dRow);

    return dTable;
}

但是这种方式给了我一个错误: 项目已添加。键入字典:'不完整'c#

我现在知道你不能在键值对中拥有重复的键。有没有人知道这种方法或我可以用来解决这个问题的不同方法。抱歉忘记添加,这需要添加到数据表中。

干杯,詹姆斯

1 个答案:

答案 0 :(得分:0)

尝试使用Dictionnary或Dictionnary而不是Hashtable。

如果要保留所有状态,请使用Dictionary>。关键是课程,您将在值部分(列表)中获得状态列表。

如果我接受你的代码,它将是这样的:

Dictionary<string, List<string>> values = new Dictionary<string, List<string>>();
        foreach (DataRow drow in dTable.Rows)
        {

            if (values.ContainsKey(drow[colName]))
            {
                if(values[row[colName]] == null)
                    values[row[colName]] = new List<string>();

                if (!values[row[colName]].Contains(drow[colTitle]))
                    values[row[colName]].Add(drow[colTitle]);
            }
        }

        return values;

希望这有帮助。