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

时间:2015-03-13 14:26:53

标签: c# search indirection

我有一个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 个答案:

答案 0 :(得分:2)

您可以使用此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,则不会使用{{1}}。你对此并不清楚。它也只返回一个索引,即使有多个具有相同的距离。