我有一个包含以下内容的列表:
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...
}
问题
如何删除/跳过包含相同值的行(在上面的示例中 123456
、abcd
、fiducial
),以便只会打印这样的内容:
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/