c# - 从 PointCollection 中检索成对的点?

标签 c# linq

我有一个点集合,存储在一个 PointCollection 中。

我需要集合中的点来画线。因此,例如,如果一个点集合有四个点,那将是两条线,因为我使用集合中的点对来绘制线。我正在寻找一种方法,最好使用 linq 和尽可能少的代码行,以基本上遍历我的 PointCollection,提取下一个可用的点对,然后使用点对绘制线。有没有办法使用 linq、lambda 表达式或扩展方法来做到这一点?

谢谢。

最佳答案

这里是获取配对的快速代码片段。

var listOfPairs = points
  .Select((p, i) => new {p, i})
  .GroupBy(x => x.i / 2)
  .Where(g => g.Skip(1).Any())
  .Select(g => g.Select(x => x.p).ToList())
  .ToList();

与 foreach 循环相比,如果您有数千个点,则性能不佳。


这是另一个请求的表单,使用捕获的变量。

Point previous = points.FirstOrDefault();

List<Pair> pairs = points
  .Skip(1)
  .Select(p =>
  {
    Pair result = new Pair(p, previous)
    previous = p;
    return result;
  })
  .ToList();

关于c# - 从 PointCollection 中检索成对的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2054673/

相关文章:

c# - log4net - 如何在连接断开后重新建立与数据库的连接

c# - 创建、组合和缓存 lambda 表达式

asp.net-mvc - Entity Framework linq 中的动态表名

c# - 扩展数据上下文类(接口(interface)、新属性等)

c# - SQL LINQ 选择标题和属于该标题的列表

c# - 连接字符串时处理 LINQ 中的空列

c# - 如何添加用于编辑行的EditForm

c# - File.Delete 不删除文件

c# - 在 C# 中从 gmail 获取通知的最佳方法

javascript - 过滤、排序和分页方法的最快方法