基于C#类与List实现风险评分矩阵的双向查询可行性问询
问题解答
核心结论
当前基于RiskScore类与List<Coordinates>的设计完全可以实现你需要的双向查询功能,但直接用List做遍历查询在数据量较大时效率偏低,建议补充构建辅助索引来优化。
具体实现思路
需求a:根据riskvalue查coordX和coordY
遍历List<Coordinates>,找到RiskValue匹配的项,直接返回其CoordX和CoordY属性即可。示例代码片段:
public (string CoordX, string CoordY) GetCoordsByRiskValue(int targetValue) { var match = coordinatesList.FirstOrDefault(c => c.RiskValue == targetValue); return match != null ? (match.CoordX, match.CoordY) : (null, null); }
需求b:根据coordX和coordY查riskvalue和RiskRatingKey
遍历List<Coordinates>,匹配CoordX和CoordY的组合,返回对应的属性。示例代码片段:
public (int RiskValue, string RiskRatingKey) GetRiskInfoByCoords(string coordX, string coordY) { var match = coordinatesList.FirstOrDefault(c => string.Equals(c.CoordX, coordX, StringComparison.OrdinalIgnoreCase) && string.Equals(c.CoordY, coordY, StringComparison.OrdinalIgnoreCase)); return match != null ? (match.RiskValue, match.RiskRatingKey) : (-1, null); }
优化建议
如果你的风险矩阵数据是固定的、不会频繁变动,建议在初始化时构建两个字典作为索引:
- 一个
Dictionary<int, Coordinates>,以RiskValue为键,存储对应坐标信息 - 一个
Dictionary<(string, string), Coordinates>,以(CoordX, CoordY)元组为键,存储对应风险信息
这样查询时可以直接通过键值对快速获取,避免遍历整个List,大幅提升查询效率。示例初始化代码:
private Dictionary<int, Coordinates> _valueToCoordMap; private Dictionary<(string, string), Coordinates> _coordToValueMap; public void InitializeIndexes(List<Coordinates> coords) { _valueToCoordMap = coords.ToDictionary(c => c.RiskValue); _coordToValueMap = coords.ToDictionary(c => (c.CoordX, c.CoordY)); }
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

