在间接数组中按对象 属性 的值搜索

Search by value of object property in an indirection array

我有一个 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 递增的顺序存储对象的索引。

您可以使用此 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都没有关系。这个你没有说清楚。即使有多个具有相同距离的索引,它也只有 returns 一个索引。