【问题标题】:Removing duplicate rows from hashtable从哈希表中删除重复行
【发布时间】:2012-10-22 11:48:38
【问题描述】:

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

课程名称 |状态
Excel,不完整
肢体语言,完整
肢体语言,被遗弃
肢体语言,不完整
肢体语言,已完成
肢体语言,完成

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

课程名称 |状态
Excel,不完整
肢体语言,完整
肢体语言,被遗弃
肢体语言,不完整

我试图这样做:

public static DataTable RemoveDuplicateRows(DataTable dTable, string colName, string colTitle) { 哈希表 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#

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

干杯,詹姆斯

【问题讨论】:

    标签: c# datatable key duplicates hashtable


    【解决方案1】:

    尝试使用字典或字典而不是哈希表。

    如果您想保留所有状态,请使用 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;
    

    希望这会有所帮助。

    【讨论】:

    • 对不起,我的字典定义没有通过
    • if (values.Contains(drow[colName])&& values.Contains(drow[colTitle])) 这行给出错误。不包含定义包含
    • 抱歉,在您进行此编辑之前,我已经尝试过 ContainsKey。它不起作用
    • 网格的结果来自一个存储过程,该过程被添加到我称为 dt 的数据表中。所以我将不得不做 dt = methodwhichremovesduplicates(dt, colName, colTitle) 它说它不能将 Dictionary> 转换为数据表。有没有办法解决这个问题?
    • 这个问题仍然没有解决:(方法很好但是当我尝试这个 dt = RemoveDuplicateRows(dt, "status","course_title"); 它显然会抛出一个错误,因为字典需要以某种方式转换为数据表。如果这个问题听起来有点愚蠢,我很抱歉这个东西很抱歉
    猜你喜欢
    • 2023-04-09
    • 2015-04-25
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多