Поиск по значению свойства объекта в массиве косвенности

У меня есть массив 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, Вы не были ясны в этом отношении. Он также возвращает только один индекс, даже если есть несколько с одинаковым расстоянием.

Другие вопросы по тегам