0

特定のキーで検索できるデータ構造を探しています。鍵は間隔です。単一の値がこの構造体に渡されると、正しい間隔 (適切なキー) が検出され、このキーが他のいくつかの値を指す場合があります。

複数の値のキーを検索したところ、次のようなものが見つかりました。

Dictionary<double,LinkedList<T>>

ただし、ここでのキー値は単純な double であり、間隔型ではありません。間隔型の場合は、間隔をキーとして渡す必要があります。ただし、単一の値に基づいて検索し、間隔を見つける必要があります。

言い換えれば、独自の検索動作を備えた辞書のような構造を持つことはできますか? (たとえば、検索を Func<,> パラメータとして渡します。)

4

3 に答える 3

2

範囲をキーにして値で検索したい場合は、これがキーとして機能すると思います。

public class Range
{
   public Range(double lower, double upper)
   {
       this.lower = lower;
       this.upper = upper;
   }

   public override Equals(object obj)
   {
       if(obj is double) return ((double)obj) > lower && ((double)obj) < upper;
       //sensibly complete this method
   }

   //also override GetHashcode, probably to use the hashcode of upper and lower
}
于 2013-01-23T06:15:37.013 に答える
2

私はこのような既存の構造を知りません。しかし、この問題を自分で解決する方法はたくさんあります。最初に頭に浮かぶのは、次のような辞書の拡張メソッドを作成することです。

public static class DictionaryRangeExtensions
{
    public IEnumerable<T> FindValuesInRange(this Dictionary<double,T> dictionary, double lowerBound, double upperBound)
    {
         dictionary.Where(kvp=> kvp.Key > lowerBound && kvp.Key < uppoerBound).Select(kvp=>kvp.Value);
    }
}
于 2013-01-23T06:03:24.833 に答える
0

重複しない間隔の場合、検索する値を一定時間の間隔にマップできる場合-通常の辞書のキーとして間隔を指定した @tallseth の提案。

値が該当する間隔を検索する必要がある場合は、間隔を並べ替えられた配列として保存します (間隔が重複しないため<、間隔のペアごとに定義されているため、簡単に実行できます)。バイナリ検索よりも、間隔値が該当するものを見つけます。間隔を使用すると、辞書にインデックスを付けるか、データに「間隔」を含め、適切な関数を使用してソート/ハッシュのためにデータから間隔を選択できます。

于 2013-01-23T06:25:32.887 に答える