清除数据表中重复的列单元格值

本文关键字:单元格 数据表 清除 | 更新日期: 2023-09-27 17:58:53

您好。

我看到的最近的帖子就是这个帖子。

我有一个包含以下信息的数据表:

ID    COL1    COL2    COL3
10    ABC     Town    Dog
20    AAA     Town    Dog
30    BBB     Town    Cat
40    CCC     City    Cat
50    DDD     City    Pig

我想清除具有类似值的列,以便只保留每个列的第一个实例。要筛选的列是用户输入,它可以生成:

ID    COL1    COL2    COL3             ID    COL1    COL2    COL3
10    ABC     Town    Dog              10    ABC     Town    Dog
20    AAA             Dog              20    AAA     Town    
30    BBB             Cat      OR      30    BBB     Town    Cat
40    CCC     City    Cat              40    CCC     City    
50    DDD             Pig              50    DDD     City    Pig

到目前为止,我有一个可以工作的代码,但它执行得很慢。

    foreach (string strListVal in lstUniqueString)  //contains the unique values
{
        foreach (DataRow drTableTraverse in dt.Rows)  //match the string vs. all rows
        {
            if (drTableTraverse[strColumnName].ToString() == strListVal && bClearedFirst == false)
            {
                bClearedFirst = true;  //flag for the first instance
                continue;  //skip the first instance, then clear the remaining
            }
            else if (drTableTraverse[strColName].ToString() == strListVal)
            {
                drTableTraverse[strColumnName] = "";  
            }
    }
}

有没有更快的方法可以达到同样的效果?不使用linq,如果有的话。

清除数据表中重复的列单元格值

这似乎是一个更优化的解决方案

foreach (string strListVal in lstUniqueString)
{
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        if (dt.Rows[i][strAttribute].ToString().Equals(strListVal) && bClearedFirst == false)
        {
            bClearedFirst = true;
            continue; //should skip first instance
        }
        else if (dt.Rows[i][strAttribute].ToString().Equals(strListVal) && bClearedFirst == true)
        {
            dt.Rows[i][strAttribute] = DBNull.Value;
        }
    }
    bClearedFirst = false;  //reset
}