如何利用存储动物正常体温的二维数组遍历判断导入数据的异常值?
动物园动物体温异常检测实现方案
首先你的NormalValues方法存在两处问题:一是参数iArray未被使用,二是返回values.ToString()只会得到数组的类型名称(如System.Object[,]),无法获取实际的正常体温数据。我们先修正这个方法,再完成后续的遍历对比逻辑。
步骤1:修正正常体温数组方法
修改方法,让它直接返回存储动物名称和正常体温的二维数组:
// 返回动物园动物的正常体温二维数组 private object[,] GetAnimalNormalTemperatures() { return new object[,] { {"Zebra", 129.5}, {"Unicorn", 54.9}, {"Platypus", 12.19}, {"Dragon", 999.98}, {"Elephant", 103.66}, {"Manticore", .035}, {"Duck", 1.34}, {"Basilisk", 45.2}, {"Sphinx", 8.00}, {"Tiger", 3.21} }; }
步骤2:导入文件数据到列表
假设你的.txt文件每行格式为动物名称,测量体温(例如Zebra,130.2),可以用以下代码读取并存储到强类型列表中:
// 用于存储单条体温测量数据的类 public class AnimalTemperatureReading { public string AnimalName { get; set; } public double MeasuredTemperature { get; set; } } // 读取指定文件并转换为测量数据列表 private List<AnimalTemperatureReading> ImportTemperatureData(string filePath) { var readings = new List<AnimalTemperatureReading>(); foreach (var line in File.ReadAllLines(filePath)) { var parts = line.Split(','); if (parts.Length == 2 && double.TryParse(parts[1], out double temp)) { readings.Add(new AnimalTemperatureReading { AnimalName = parts[0].Trim(), MeasuredTemperature = temp }); } } return readings; }
步骤3:遍历对比,找出异常数据
遍历导入的测量列表,与二维数组中的正常值匹配,判断体温是否异常:
private void CheckForTemperatureAbnormalities() { // 获取正常体温数组 var normalTemps = GetAnimalNormalTemperatures(); // 导入测量数据(实际使用时可替换为文件选择对话框获取路径) var measuredReadings = ImportTemperatureData("你的文件路径.txt"); Console.WriteLine("体温异常的动物记录:"); // 遍历每条测量数据 foreach (var reading in measuredReadings) { double normalTemp = -1; // 在二维数组中查找对应动物的正常体温 for (int i = 0; i < normalTemps.GetLength(0); i++) { if (normalTemps[i, 0].ToString() == reading.AnimalName) { normalTemp = Convert.ToDouble(normalTemps[i, 1]); break; } } // 判断并输出异常结果 if (normalTemp != -1) { if (reading.MeasuredTemperature != normalTemp) { var status = reading.MeasuredTemperature > normalTemp ? "高于" : "低于"; Console.WriteLine($"{reading.AnimalName}: 测量体温{reading.MeasuredTemperature},{status}正常值{normalTemp}"); } } else { Console.WriteLine($"{reading.AnimalName}: 未找到对应的正常体温数据"); } } }
优化建议:提升查找效率
如果动物数量较多,建议将二维数组转换为Dictionary<string, double>,把查找时间复杂度从O(n)降到O(1):
// 将二维数组转换为字典,方便快速查找 private Dictionary<string, double> GetAnimalNormalTempDictionary() { var normalTemps = GetAnimalNormalTemperatures(); var tempDict = new Dictionary<string, double>(); for (int i = 0; i < normalTemps.GetLength(0); i++) { tempDict.Add(normalTemps[i, 0].ToString(), Convert.ToDouble(normalTemps[i, 1])); } return tempDict; }
使用字典后的对比逻辑更简洁:
var normalTempDict = GetAnimalNormalTempDictionary(); foreach (var reading in measuredReadings) { if (normalTempDict.TryGetValue(reading.AnimalName, out double normalTemp)) { if (reading.MeasuredTemperature != normalTemp) { var status = reading.MeasuredTemperature > normalTemp ? "高于" : "低于"; Console.WriteLine($"{reading.AnimalName}: 测量体温{reading.MeasuredTemperature},{status}正常值{normalTemp}"); } } else { Console.WriteLine($"{reading.AnimalName}: 未找到对应的正常体温数据"); } }
内容的提问来源于stack exchange,提问作者Shane_Tater
相关产品推荐
相关产品推荐

