c# - 删除列表中包含相同内容的行

标签 c# list duplicates

我有一个包含以下内容的列表:

C12 0402 123456 90
C133 0402 123456 90
C9 0402 123456 90
C132 0603 abcd 0
C54 0603 abcd 0
R FID1 fiducial 0
R FID2 fiducial 0
R FID3 fiducial 0
R FID4 fiducial 0

我想检查列表中的每一行并确保未添加重复项...我尝试过此操作,但我知道这里存在逻辑错误。

List<string> noDuplicatesList = new List<string>();

foreach (var line in theList)
{
    if (!noDuplicatesList.Contains(line.PartNumber)) //This is doing nothing...?
        noDuplicatesList.Add(line.Name + " " + line.PartDescription + " " line.PartNumber + " " + line.Rotation);
}

foreach (var line in noDuplicatesList)
{
    var splitLine = line.Split(' ');
    //Print out statements...
}

问题

如何删除/跳过包含相同值的行(在上面的示例中 123456abcdfiducial),以便只会打印这样的内容:

C12 0402 123456 90
C132 0603 abcd 0
R FID1 fiducial 0

最佳答案

是否只使用第三列作为分组条件?

var noDuplicatesList = lines
    .GroupBy(l => l.PartNumber)
    .Select(group => group.First())

foreach(var item in noDuplicatesList)
    Console.WriteLine("{0} {1} {2} {3}", 
        item.Name,
        item.PartDescription,
        item.PartNumber,
        item.Rotation
    );

行:

C12 0402 123456 90
C133 0402 123456 90
C9 0402 123456 90
C132 0603 abcd 0
C54 0603 abcd 0
R FID1 fiducial 0
R FID2 fiducial 0
R FID3 fiducial 0
R FID4 fiducial 0

lines.GroupBy(l => l.PartNumber):

{ C12 0402 123456 90, C133 0402 123456 90, C9 0402 123456 90}
{ C132 0603 abcd 0, C54 0603 abcd 0 }
{ R FID1 fiducial 0, R FID2 fiducial 0, R FID3 fiducial 0, R FID4 fiducial 0 }

lines.GroupBy(l => l.PartNumber).Select(group => group.First()):

C12 0402 123456 90
C132 0603 abcd 0
R FID1 fiducial 0

关于c# - 删除列表中包含相同内容的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7409316/

相关文章:

c# - 为什么向我的 WCF 服务操作添加参数会起作用?

c# - 如何使用 Entity Framework 将 2 个相关对象存储在不同的数据库中

python - 如果存储的数据为十六进制并以str形式存储,如何转换为十六进制

c# - 如何从foreach中的其他元素列表中填充数组?

r - 合并函数生成重复项

javascript - 我想删除重复项而不用 Javascript 进行排序

jquery - 检查ID是否存在,然后重命名

c# - 为什么 `XmlDocument.LoadXml()` 不适用于命名空间?

c# - 将 ASCII 字符数组转换为 UNICODE 字符串

python - 拆分列表并打印所需的输出