1

いくつかのメンバーと値の間かどうかを知る方法を使用して、範囲変数 (最小、最大) の構造体を作成しようとしています。

現在、私の構造体は次のようになっています。

public struct NumRange
{
    float maximum;
    float minimum;

    public NumRange(float min, float max) 
    {
        this.maximum = max;
        this.minimum = min;
    }

    public bool IsBetween(float value)
    {
        if (value < maximum && value > minimum)
            return true;

        return false;
    }
}

数値範囲を作成できるようにしたい

NumRange test = new NumRange(15, 20);

この範囲変数型を作成するポイントは、次のようなマップ キー ディクショナリを作成することです。

public Dictionary<NumRange, Color> mapKey = new Dictionary<NumRange, Color>();
NumRange test = new NumRange(15, 20);
mapKey.Add(test, Color.Orange);

これが最善の方法ですか?また、mapKey に何かを追加しようとしても気に入りません。',' ')' '(' などの無効なトークンがあることを示します

4

1 に答える 1

2

検索する値の数が限られている場合を除き、辞書は最適な選択ではない可能性があります。高さマップに適用するために、値の範囲を色にマッピングしているようです。クラスのこのスタブを使用するとそれが可能になりますが、色 A から色 B へのブレンドには対応していないことに注意してください。

class RangeMap<T>
{
    private SortedList<float, T>  _values;

    public RangeMap()
    {
        _values = new SortedList<float, T>();
    }

    public void AddPoint(float max, T value)
    {
        _values[max] = value;
    }

    public T GetValue(float point)
    {
        if (_values.ContainsKey(point)) return _values[point];

        return (from kvp in _values where kvp.Key > point select kvp.Value)
               .FirstOrDefault();
    }
}   
var  map = new RangeMap<Color>();
map.AddPoint(0.0F, Color.Red);
map.AddPoint(0.5F, Color.Green);
map.AddPoint(1.0F, Color.Blue);

Console.WriteLine(map.GetValue(-0.25F).Name);
Console.WriteLine(map.GetValue( 0.25F).Name);
Console.WriteLine(map.GetValue( 0.75F).Name);
Console.WriteLine(map.GetValue( 1.25F).Name);

出力: 赤、緑、青、空の構造体。

于 2012-07-27T20:42:56.993 に答える