如何使用C#对2D点列表进行排序?

时间:2010-11-13 11:53:29

标签: c#

根据X然后是Y,按降序对点列表进行排序。

5 个答案:

答案 0 :(得分:10)

list.Sort((a,b)=>{
    int result = a.X.CompareTo(b.X);
    if(result==0) result = a.Y.CompareTo(b.Y);
    return result;
});

答案 1 :(得分:6)

Marc Gravell的答案(将对列表本身进行排序)的另一种方法是获取IEnumerable<T>,其中.ToList()可以成为var ordered = from v in yourList orderby v.X, v.Y select v; var orderedList = ordered.ToList(); 的列表,这是LINQ语法:

IEnumerable

但除非您不想对列表本身进行实际排序,否则您只需要List.Sort,{{1}}会更好。

答案 2 :(得分:1)

List<Point> sortedList = MyList.Sort(
    delegate(Point p1, Point p2) 
    {
        int r = p1.x.CompareTo(p2.x); 
        if(r.Equals(0)) return p1.y.CompareTo(p2.y);
        else return r;
    }
);

答案 3 :(得分:0)

如果评论者确实是正确的,并且您正在寻找解决家庭作业问题的方法,我怀疑真正的作业是教你如何对整数值进行排序。所以我会帮助你开始。

提示 Point structure有两个您可能会觉得有用的属性,XY,它们分别返回这两个轴的坐标值

答案 4 :(得分:0)

有很多方法可以对列表进行排序。

例如,要将列表从最小(x,y)排序到最大,您可以尝试此算法:

  1. 将列表中的第一项与第二项
  2. 进行比较
  3. 如果第二个点小于第一个(x1 > x2 || (x1 == x2 && y1 > y2)),则交换它们
  4. 以相同方式比较第二点和第三点,依此类推,直至到达列表末尾
  5. 返回列表的开头并再次运行比较,直到最后一个元素
  6. 重复步骤4,但每次都提前停止一个元素,直到您没有剩余的元素进行排序
  7. 这是一种效率低下的算法,但它可以完成工作。

    要获得更好的算法,请查看http://www.sorting-algorithms.com/