我有一个 .csv 文件,其中每一行数据代表一个零件及其相关参数。例如名称、Y 位置等。我已经定义了一个类来表示每个部分,并且已经将 .csv 解析为 List<Part> parts
但是,CSV 文件包含具有相同名称的多行。我想减少 List<Part> parts
组合相同名称的行并平均 Y 位置。
输入:.csv
Name,XPosition,YPosition
A,10,1
B,10,4
C,10,3
C,10,5
D,12,6
D,12,8
我已经根据这些数据创建了 List<Part> parts
。
所需的输出: List<Parts> part
包含:
Part { Name="A", YPosition=1 },
Part { Name="B", YPosition=4 },
Part { Name="C", YPosition=4 },
Part { Name="D", YPosition=7 }
我试过了:
List<Part> parts = parts
.GroupBy(p => p.Name)
.Select(g => new Part()
{
Name = g.Key,
YPosition = g.Average(p => p.YPosition)
}
foreach (Part g in parts)
{
Console.WriteLine(g.Name + "," + g.XPosition + "," + g.YPosition);
}
但是 XPosition 不会传递给零件...
回答1
当您从零件中获取其他信息时,您似乎没有选择 XPosition。我在下面添加了一个 select 语句,以从 Part 中获取 XPosition 的第一个 value。我运行了这段代码并获得了所需的 XPosition。希望这可以解决您的问题。
List<Part> parts = parts
.GroupBy(p => p.Name)
.Select(g => new Part()
{
Name = g.Key,
XPosition = g.Select(p => p.XPosition).FirstOrDefault(),
YPosition = g.Average(p => p.YPosition)
}