C# 从哈希表中删除重复行

C# 从哈希表中删除重复行,c#,datatable,key,duplicates,hashtable,C#,Datatable,Key,Duplicates,Hashtable,大家好,我有一个网格,里面有他们参加的教育课程的用户结果。对于每个用户,他们都有自己的表格,显示他们完成的每个课程以及他们每次尝试课程的状态。例如: 课程主题|状态 Excel,不完整 肢体语言,完整的 身体语言,被抛弃的 肢体语言,不完整 肢体语言,已完成 肢体语言,已完成 删除重复项后,表应如下所示: 课程主题|状态 Excel,不完整 肢体语言,完整的 身体语言,被抛弃的 肢体语言,不完整 我试着这样做: 公共静态DataTable RemovedUpplicateRows(DataTab

大家好,我有一个网格,里面有他们参加的教育课程的用户结果。对于每个用户,他们都有自己的表格,显示他们完成的每个课程以及他们每次尝试课程的状态。例如:

课程主题|状态
Excel,不完整
肢体语言,完整的
身体语言,被抛弃的
肢体语言,不完整
肢体语言,已完成
肢体语言,已完成

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

课程主题|状态
Excel,不完整
肢体语言,完整的
身体语言,被抛弃的
肢体语言,不完整

我试着这样做:

公共静态DataTable RemovedUpplicateRows(DataTable dTable、string colName、string colTitle) { Hashtable hTable=新的Hashtable(); ArrayList duplicateList=新的ArrayList()

但这种方式给了我一个错误: 已添加项。在字典中键入:“未完成”c#

我现在知道,键、值对中不能有重复的键。是否有人知道解决此问题的方法,或者我可以使用其他方法来解决此问题。很抱歉,忘记添加需要添加到数据表中的内容


干杯,詹姆斯

试着用字典或字典代替哈希表

如果您想保留所有状态,请使用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;
字典值=新字典();
foreach(dTable.Rows中的数据行drow)
{
if(values.ContainsKey(drow[colName]))
{
if(值[行[colName]]==null)
值[行[colName]]=新列表();
如果(!values[row[colName]]包含(drow[colTitle]))
值[row[colName]]。添加(drow[colTitle]);
}
}
返回值;

希望这能有所帮助。

我的字典定义没有通过sorryif(values.Contains(drow[colName])&&values.Contains(drow[colTitle]))这一行给出了一个错误。不包含定义Containessorry man在您进行此编辑之前我已经尝试过ContainesKey。它不起作用网格的结果来自一个添加到我称为dt的数据表中的存储过程。因此我必须执行dt=methodwhichremovesduplicates(dt,colName,colTitle)它说它不能将字典转换成数据表。有办法解决这个问题吗?这个问题仍然没有解决:(这个方法很好,但当我尝试这个dt=RemovedUpplicateRows(dt,“状态”,“课程名称”);很明显,它抛出了一个错误,因为字典需要以某种方式转换为数据表。我对这个东西很新,如果这个问题听起来有点愚蠢,那么很抱歉
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;