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)
        ...

手でアルゴリズムを書きたくない。標準ライブラリのアルゴリズムの 1 つを何とか使用できますか?

編集:

_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かまいません。あなたはこれについて明確ではありませんでした。また、同じ距離のインデックスが複数ある場合でも、1 つのインデックスのみを返します。Timed

于 2015-03-13T14:31:45.430 に答える