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