【问题标题】:Sorting a List of points C# [duplicate]对点列表进行排序C# [重复]
【发布时间】:2014-10-27 14:02:55
【问题描述】:

我正在尝试对列表进行排序(此 Point3D 是 Rhino 库类)。我希望之前有最小 X 的点,但如果它们具有相同的 X,我需要按最小 Y 对这些点进行排序。例如我有:

Point 1: X = 2; Y = 1
Point 2: X = 4; Y = 2
Point 3: X = 4; Y = 1
Point 4: X = 3; Y = 8
Point 5: X = 2; Y = 6
Point 6: X = 2; Y = 4

我想要的顺序是:

Point 1: X = 2; Y = 1
Point 6: X = 2; Y = 4
Point 5: X = 2; Y = 6
Point 4: X = 3; Y = 8
Point 3: X = 4; Y = 1
Point 2: X = 4; Y = 2

我使用这个简单的代码:

myPointList.sort();

但是我有一个不正确的命令,因为我必须删除其中的一些点,如果它们有我想要的顺序,我会删除正确的点,但我会删除我不正确的点想抹去。

有人可以帮帮我吗?

非常感谢!

【问题讨论】:

标签: c# list sorting point grasshopper


【解决方案1】:

使用 Linq:

Points.OrderBy(p => p.X).ThenBy(p => p.Y)

【讨论】:

  • 什么是 p?我只有我的 List... 我应该有类似 PointList.OrderBy(PointList => PointList[i].X).ThenBy(PointList => PointList[i].Y) 的东西吗?
  • p 是 lambda 表达式中的一个变量名,所以它的名字并不重要,只要它是唯一的。您可以像查看单个 Point3d 一样引用“p”,因此您可以直接访问它的属性。
  • 别忘了使用 System.Linq 添加;
【解决方案2】:

您可能需要稍微修改一下,但想法是先按 x 后 y 排序

var sortedList = PointList.OrderBy(p => p.X)
                          .ThenBy(p => p.Y)
                          .ToList();

【讨论】:

  • 你能告诉我什么是p吗?对不起
  • @Imrik - p 只是表示 lambda 表达式的一个点,它有点像一个临时变量
【解决方案3】:

您需要实现一个自定义比较器并将其作为参数传递给排序方法。

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2010-10-29
    • 2015-11-14
    相关资源
    最近更新 更多