我正在研究存储结构并使其易于搜索返回键的单个值的最佳方式。这是伪数据结构:
N = 0
NNE = 1 .. 44
NE = 45
ENE = 46 .. 89
E = 90
ESE = 91 .. 134
SE = 135
SSE = 136 .. 179
S = 180
SSW = 181 .. 224
SW = 225
WSW = 226 .. 269
W = 270
WNW = 271 .. 314
NW = 315
NNW = 316 .. 359
我希望能够以一种我可以这样说的方式存储这些值:
给我给定值的键值。因此,如果我需要 193 的 key ,我会被退回 SSW。我一直在尝试不同的想法,但想看看你们的想法。
我以风向为例,但数据可以是任何数据。
数据结构将被编译并且永远不会改变。
谢谢。
最佳答案
您可以创建一个类来保存“键”(我认为“名称”是更合适的描述符,但您可以随意调用它)和罗盘上的值范围,例如:
public class CompassRange
{
public string Name { get; set; }
public int Min { get; set; }
public int Max { get; set; }
}
然后,创建创建静态 List<CompassRange>
的类并适本地填充它:
public class Compass
{
private static List<CompassRange> _ranges;
static Compass()
{
_ranges = new List<CompassRange>()
{
// Add CompassRange objects here
};
}
}
最后,您可以向此类添加一个方法来搜索 List
对于适当的范围并返回名称:
public static string GetName(int direction)
{
direction = direction % 360;
return _ranges.First(x => x.Min <= direction && x.Max >= direction).Name;
}
您甚至可以使用内置的 System.Tuple<string, int, int>
输入而不是 CompassRange
,尽管这牺牲了这段代码的一些清晰度。
关于C# 映射罗盘点和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7350969/