Как найти индекс списка объекта, содержащий самое близкое значение свойства?Найти индекс списка объекта, содержащего самое близкое значение свойства
Образец, класс MyData содержит собственность Позиция. Класс MyDataHandler имеет список MyData и позиции: 1, 3, 14, 15, 22.
MyDataHandler имеет метод, называемый GetClosestIndexAt, если входное значение 13, то метод должен возвращать индекс 2.
кодПример:
public class MyData
{
public double Position { get; set; }
public string Name { get; set; }
}
public class MyDataHandler
{
private List<MyData> myDataList = new List<MyData>();
public MyDataHandler()
{
FillMyData(myDataList);
}
public int GetClosestIndexAt(double position)
{
int index = -1;
//How to get the index of the closest MyDataList.Position to position value.
//index = ?????
return index;
}
private void FillMyData(List<MyData> MyDataList)
{
//fill the data...
}
}
Почему использование MinBy - лучшее решение? Спасибо за ответ. – Pedro77
@ Pedro77 Расширение MinBy находит ответ в линейном времени, а 'OrderBy' требует O (N * LogN) времени. Когда вход очень большой (много тысяч элементов), эта разница может стать проблемой, особенно если вы несколько раз вызываете 'GetClosestIndexAt'. – dasblinkenlight
@ Pedro77 OrderBy перечисляет источник и создает упорядоченную копию (т.он сначала сортирует все предметы и сохраняет их, и только затем возвращает min item для вас). MinBy, с другой стороны, хранит только один элемент, который намного лучше с точки зрения производительности (я считаю его читаемым). А также dasblinkenlight правильно указал на использование времени –