C#查找字典

DNN*_*DNN 5 c#

我目前正在尝试创建一个根据信号强度估算位置的程序.信号强度值是一个int,然后我需要一个带范围的查找字典.

所以我会有类似的东西:

Signal Strenth             Position
0-9                            1
10-19                          2
20-29                          3
Run Code Online (Sandbox Code Playgroud)

然后我想查看信号强度所涉及的位置,例如15与位置2有关.

我知道我可以加载一些if语句但是有一种很好的方法可以使用某种查找字典吗?

Dan*_*ott 11

关于什么 :

int position = signalStrength / 10 + 1;
Run Code Online (Sandbox Code Playgroud)

善良,

  • 很好的答案,假设范围实际上是10组,这不仅仅是一个样本异常. (2认同)

dtb*_*dtb 11

如果您有任意但连续的范围,则可以使用上限数组并执行二进制搜索以获取位置:

// Definition of ranges
int[] ranges = new int[] { 9, 19, 29 };

// Lookup
int position = Array.BinarySearch(ranges, 15);
if (position < 0)
    position = ~position;

// Definition of range names
string[] names = new string[] { "home", "street", "city", "far away" };

Console.WriteLine("Position is: {0}", names[position]);
Run Code Online (Sandbox Code Playgroud)

Array.BinarySearch 返回数组中项的索引(如果存在,则数组必须明显排序)或者应该插入项的按位反转索引,以保持数组的排序.