我正在处理一个小应用程序。当我添加新目的地时,我想按照彼此最近的位置重新排列我的列表。
使用CalcDistance方法,我可以计算当前位置和下一个位置之间的距离。
但是我一直在排序我的名单。有什么想法吗?
public class Transportcar
{
public Destinations Start { get; set; }
public Destinations End { get; set; }
public int Deliveries { get; set; }
List<Destinations> _destinations;
public Transportcar()
{
_destinations = new List<Destinations>();
}
public void AddDestination(Destinations destination)
{
_destinations.Add(destination);
}
public IEnumerable<Destinations> Destinations {
get {
return _destinations.AsEnumerable();
}
}
public double CalcDistance(Destinations Start, Destinations End)
{
//een ouwe man zei ooit: c^2 = a^2 + b^2
return Math.Sqrt(Math.Pow(Math.Abs(Start.X - End.X), 2) + Math.Pow(Math.Abs(Start.Y - End.Y), 2));
}
}
public class Sendings
{
public List<Destinations> DestinationsTodo = new List<Destinations>();
public void SortList()
{
DestinationsTodo = DestinationsTodo.OrderBy(x => x.X).ThenBy(x => x.Y).ToList();
}
}
}
答案 0 :(得分:0)
在您的情况下,我完全建议使用SortedList
课程,但如果您确定使用List
,则可以从destination
中减去所有deliver
点,然后对它进行排序。
List<Point> sub = new List<Point>();
_destinations.ForEach(item => sub.Add(new Point(item.X - deliver.X, item.Y - deliver.Y)));
sub.Sort((a, b) =>
{
double d1 = Math.Pow(a.X, 2) + Math.Pow(a.Y, 2);
double d2 = Math.Pow(b.X, 2) + Math.Pow(b.Y, 2);
return d1.CompareTo(d2);
});
List<Point> sorted = new List<Point>();
sub.ForEach(item => sorted.Add(new Point(item.X + deliver.X, item.Y + deliver.Y)));
最后,sorted
列表就是您想要的。