我正在尝试使用一些成员和一个方法来为范围变量(最小值,最大值)创建一个结构,以了解值之间。
现在我的结构看起来像这样:
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添加内容时,它也不喜欢。说有无效的令牌,如','''''('
答案 0 :(得分: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);
输出:红色,绿色,蓝色,空结构。