你可以创建一个自定义方法,查找接近值并接受两个参数:保存数值的字典和浮点数,用于保存最大查找范围 :
static Dictionary<string, float> FindRange(Dictionary<string, float> dict, float precision)
{
Dictionary<string, float> temp = new Dictionary<string, float>();
List<int> counter = new int[dict.Count].ToList(); float[] values = dict.Values.ToArray();
for (int i = 0; i < values.Length; i++)
for (int i2 = 0; i2 < values.Length; i2++)
if (i2 != i && Math.Abs(values[i] - values[i2]) < precision) counter[i]++;
for (int i = 0; i < values.Length; i++)
if (Math.Abs(values[i] - values[counter.IndexOf(counter.Max())]) < precision)
temp.Add(dict.FirstOrDefault(kv => kv.Value == values[i]).Key, values[i]);
return temp;
}
使用示例:
static void Main()
{
Dictionary<string, float> heights = new Dictionary<string, float>()
{
{"first", 61.456f},
{"second", 80.567f},
{"third", 62.456f},
{"4", 59.988f},
{"5", 90.34f},
{"6", 82.123f}
};
var newDict = FindRange(heights, 3f);
foreach (var item in newDict)
{
Console.WriteLine(item.Key + " " + item.Value);
}
}
输出:
first 61,456
third 62,456
4 59,988