0

我有一个 Int32 数组,每个元素都包含对另一个数组中对象的引用索引:

class MyObject {
    public Int32 Time;
}

MyObject[] _objects;
Int32[] _indices;

现在我需要找到 Time 最接近 some 的对象的索引Double d。比较的伪代码可能是这样的:

for (i = 0; i < _indices.Length; i++)
    if (d > _objects[indices[i]].Time)
        ...

我不想手动编写算法。我可以以某种方式使用标准库算法之一吗?

编辑:

我认为重要的是_indices要按递增的顺序存储对象的索引.Time

4

1 回答 1

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

于 2015-03-13T14:31:45.430 回答