Поиск по значению свойства объекта в массиве косвенности
У меня есть массив Int32, каждый элемент содержит индекс ссылки на объект в другом массиве:
class MyObject {
public Int32 Time;
}
MyObject[] _objects;
Int32[] _indices;
Теперь мне нужно найти индекс объекта, время которого ближе к Double d
, Псевдокод сравнения может быть таким:
for (i = 0; i < _indices.Length; i++)
if (d > _objects[indices[i]].Time)
...
Я не хочу писать алгоритм руками. Могу ли я как-то использовать один из стандартных библиотечных алгоритмов?
РЕДАКТИРОВАТЬ:
Я думаю, что важно сказать, что _indices
хранит индексы объектов в порядке возрастания .Time
,
1 ответ
Решение
Вы можете использовать этот запрос LINQ:
int indexClosestTime = indices
.Select(i => new { Object = _objects[i], Index = i})
.OrderBy(x => Math.Abs(d - x.Object.Time))
.First().Index;
я использовал Math.Abs
так что не имеет значения, если Time
меньше или больше чем d
, Вы не были ясны в этом отношении. Он также возвращает только один индекс, даже если есть несколько с одинаковым расстоянием.