gpt4 book ai didi

c# - 使用 Linq 重新排列嵌套列表

转载 作者:行者123 更新时间:2023-11-30 23:19:40 25 4
gpt4 key购买 nike

我目前正在从事一个项目,我从电子表格中读取行数据。基础数据的结构可以在左侧的附图中看到。也可以看出,我想分两步重新排列数据。

Image1: Steps to sort the list

  • 首先,我将具有相同 PartName 的元素组合在一起,并将两个坐标对组合在一条线上。我将坐标存储在嵌套列表中。
  • 其次,我想合并具有相同ID 的元素并再次合并坐标。重要的是列表保持其顺序并且最终不存在重复项。像这样:{x1y1,x2y2}{x2y2,x3y3}=>{x1y1,x2y2,x3y3}

元素部分的数量是通用的,因此坐标对的数量也是通用的。

这是我目前使用的简化对象类:

public class ElmLine
{
public int Id{ get; set; }
public string PartName {get; set;}
public List<CoordList> CoordList { get; set; }
}

public class CoordList
{
public decimal XCord { get; set; }
public decimal YCord { get; set; }
}

这是我第 1 步的方法。我重新排列了基本列表并将协调对存储在名为 CoordList 的嵌套列表中。

public void BuildLinesFormSegments(IList<ElmLine> filteredLine)
{
// Merge line parts and add FROM and TO to each line part
var combinedLineParts = filteredLine
.GroupBy(c => new { c.Fid, c.FidPart }).Select(g => new ElmLine()
{
Id = g.Select(c => c.Id).First(),
PartName = g.Select(c => c.PartName).First(),
CoordList = g.Select(c => new CoordList()
{ XCord = c.CoordX, YCord = c.CoordY }).ToList(),
}).ToList();
}

生成的列表 combinedLineParts 如下所示:

var list = new LineParts<ElmLine>
{
new ElmLine {Name = 1, CoordList = new List<CoordList>
{new CoordList {XCord = x1, YCord = y1}, new CoordList { XCord = x2, YCord = y2 }} },
new ElmLine {Name = 1, CoordList = new List<CoordList>
{new CoordList {XCord = x2, YCord = y2}, new CoordList { XCord = x3, YCord = y3 }} },
new ElmLine {Name = 2, CoordList = new List<CoordList>
{new CoordList {XCord = x11, YCord = y11}, new CoordList { XCord = x12, YCord = y12 }} },
new ElmLine {Name = 2, CoordList = new List<CoordList>
{new CoordList {XCord = x12, YCord = y12}, new CoordList { XCord = x13, YCord = y13 }} },
};

不幸的是,我卡在了这一点上,我不知道如何继续执行第 2 步。如果有人可以提示我接下来可以做什么,那就太好了。

提前谢谢你。

最佳答案

第 3 步实际上不需要依赖第 2 步。您只需按 ID 分组并保持不同的坐标值:

var result = filteredLine
.GroupBy(c => c.Fid)
.Select(g => new ElmLine()
{
Id = g.Key,
CoordList = g
.Select(c => { c.CoordX, c.CoordY })
.Distinct()
.Select(c => new CoordList()
{ XCord = c.CoordX, YCord = c.CoordY })
.ToList(),
}).ToList();

关于c# - 使用 Linq 重新排列嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40157925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com