在间接数组中按对象 属性 的值搜索
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 一个索引。
我有一个 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 一个索引。