簡體   English   中英

排序數組C#的最快方法

[英]Fastest way to sort an Array c#

嗨,這是我的問題,我有一個點P(x,y)的數組,我需要根據多邊形的重心從最遠到最近對這些點進行排序,這是我所做的(我知道這是一個糟糕的解決方案)我該如何做一個更好,更快速的解決方案?

List<C2DPoint> OrderedGripperPoints = new List<C2DPoint> { };

while(myGripperPoints.Count!=0) 
{
    double dist=-1;
    int index=-1;
    for(int k=0;k<myGripperPoints.Count;k++)
    {
        if(myGripperPoints[k].Distance(WorkScrap.GetCentroid())>=dist)
        {
            index = k;
            dist = myGripperPoints[k].Distance(WorkScrap.GetCentroid());
        }
    }

    OrderedGripperPoints.Add(myGripperPoints[index]);
    myGripperPoints.RemoveAt(index);
}

感謝您的回答...

使用Linq排序點。

using System.Linq;

var sortedList = myGripperPoints.OrderBy(p => p.Distance(WorkScrap.GetCentroid())).ToList();

考慮以下代碼:

點類(假設類定義)

class Point
{
    public int X { get; set;}

    public int Y { get; set;}   
}

點平等比較器

class PointEqualityComparer : IEqualityComparer<Point>
{
    public bool Equals(Point p1, Point p2) { return p1.X == p2.X && p1.Y == p2.Y; }

    public int GetHashCode(Point p) { return p.X.GetHashCode() *31 + p.Y.GetHashCode()*23; }
}

創建一個字典,將Point作為鍵,將Distance作為值(假設為整數):

Dictionary<Point,int> pointDictionary = 
new Dictionary<Point, int>(new PointEqualityComparer());

添加點如下:

Point p = new Point {X = <value>, Y = <value>};
pointDictionary.Add(p,p.Distance(WorkScrap.GetCentroid()));

按距離排序如下:

pointDictionary.OrderByDescending(x => x.Value).ToList();
  1. 按距離順序按期望的降序排列
  2. 結果將是List<KeyValuePair<Point,int>> ,其中元素按降序排列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM