在c#中,计算“趋势”最简单的方法是什么?给定当前和以前的状态
本文关键字:状态 是什么 方法 计算 趋势 最简单 | 更新日期: 2023-09-27 17:53:05
我有一个变量来显示项目上的RAG状态(Red, Amber, Green)
var previousStatus = "R"
var currentStatus = "A"
,我想计算"趋势",所以像
var trend = CalculateTrend(previous, current)
我试图找到一个比
更优雅的解决方案 if (prev == current)
return "Stable";
if (prev == "R" && (current == "G" ||current == "A"))
return "Improving";
if (prev == "G" && (current == "R" ||current == "A"))
return "Declining";
if (prev == "A" && current == "G")
return "Improving";
if (prev == "A" && current == "R")
return "Declining";
有什么"更干净"的解决方案吗
为每个状态创建一个整数值的enum
。
public enum Status
{
Red = 1,
Amber = 2,
Green = 3
}
则采用int.CompareTo
法。
switch(previous.CompareTo(current))
{
case -1:
return "Improving";
case 0:
return "Stable";
case 1:
return "Declining";
}
使用数字系统。用等效数值对值进行评级。然后你可以用数学
如果你只是想避免使用If语句,你可以创建一个简单的查找字典:
private static string GetTrend(string prev, string cur)
{
var trends = new Dictionary<string, string[]>()
{
{"Stable", new[] {"AA", "RR", "GG"}},
{"Improving", new[] {"RG", "RA", "AG"}},
{"Declining", new[] {"GA", "GR", "AR"}},
};
return trends.Single(x => x.Value.Contains(prev + cur)).Key;
}