Алгоритм не существует "из коробки" в .NET (C # является языком и обычно не реализует алгоритмы, его обычно можно найти в библиотеке базовых классов .NET).
Тем не менее, вы можете легко создать Coordinates
структуру / класс со свойствами Latitude
/ Longitude
(каждое как double
, я так понимаю) и затем реализовать IComparable<T>
.
Реализация тогда будет выглядеть примерно так:
public class Coordinates : IComparable<Coordinates>
{
public double Latitude { get; set; }
public double Longitude { get; set; }
public int CompareTo(Coordinates other)
{
// If the other instance is null, assume that
// it is at 0,0? You need to make that determination.
if (other == null) return 1;
// Compare longitude (double implements
// IComparable<double>.
int comparison = Longitude.CompareTo(other.Longitude);
// If not 0, return the value.
if (comparison <> 0) return comparison;
// Compare latitude. Inverse the result, as the more
// south point (closer to 0) is greater.
// Just return the value, if they are different, the
// comparison value will be correct, if they are the
// same, then comparison will be 0.
return -Latitude.CompareTo(other.Latitude);
}
}
Теперь вы можете заполнить их экземпляры, поместить их в массив и передать его методу static Sort
вArray
класс .Метод Sort
будет использовать реализацию IComparable<T>
для сортировки массива.
Или вы можете поместить их в List<T>
(возможно, проще, поскольку вы можете заранее не знать количество элементов), а затемвызовите Sort
метод в экземпляре;он также будет использовать реализацию IComparable<T>
для сортировки.
Вы также упомянули две одинаковые точки.Поскольку Latitude
и Longitude
представлены как double
, вы рискуете получить ошибки с плавающей запятой.Если вы хотите уменьшить эти ошибки, вы можете легко изменить свойство на decimal
(что гарантирует точность до определенной точки);таким образом, вы гарантируете точность, и она реализует IComparable<decimal>
, что означает, что реализация IComparable<Coordinates>
будет просто работать с коммутатором.