• 『算法』.Net 字符串计算算法


    转载请标明:舒小龙 http://www.cnblogs.com/shuxiaolong/articles/2901784.html

    什么都不说,直接贴测试类代码:

     1         [Test]
     2         public static void TestCompute()
     3         {
     4             const bool result = 12 + 13 == 14 + 11;
     5             Console.WriteLine(result);
     6 
     7             //这个作为 预运算,作为加载 类,函数 的.Net 底层开销——不计算在执行时间内 
     8             string none = ComputeHelper.Compute("1+(1+1)").Value + "\r\n";
     9             Console.WriteLine("预运算: " + none);
    10 
    11 
    12             DateTime dt1 = DateTime.Now;
    13             string sTemp = string.Empty;
    14 
    15             sTemp += ComputeHelper.Compute("(2+8)*(1+2+77+(12+8))").Value + "\r\n";
    16             sTemp += ComputeHelper.Compute("345*657").Value + "\r\n";
    17             sTemp += ComputeHelper.Compute("2+(235*(2+3))").Value + "\r\n";
    18             sTemp += ComputeHelper.Compute("123+65+234+132+432").Value + "\r\n";
    19             sTemp += ComputeHelper.Compute("1+1+1+1+1").Value + "\r\n";
    20             sTemp += ComputeHelper.Compute("123*654*907").Value + "\r\n";
    21             sTemp += ComputeHelper.Compute("(1234+987)*765").Value + "\r\n";
    22             sTemp += ComputeHelper.Compute("7868*989+5678").Value + "\r\n";
    23             sTemp += ComputeHelper.Compute("1234*546").Value + "\r\n";
    24             sTemp += ComputeHelper.Compute("(122+5654)*(2+976)").Value + "\r\n";
    25             sTemp += ComputeHelper.Compute("100-50+50-50").Value + "\r\n";
    26             sTemp += ComputeHelper.Compute("False?111:222").Value + "\r\n";
    27             sTemp += ComputeHelper.Compute("11111===11111").Value + "\r\n";
    28             sTemp += ComputeHelper.Compute("(11111===2222)?111:222").Value + "\r\n";
    29             sTemp += ComputeHelper.Compute("10-1+2-3+4-5+6").Value + "\r\n";
    30             sTemp += ComputeHelper.Compute("10-1*2-3*4-5/6").Value + "\r\n";
    31             sTemp += ComputeHelper.Compute("10-1*2-3*4-5/6").Value + "\r\n";
    32             sTemp += ComputeHelper.Compute("\"QWERTYUIOP{}:\" LIKE \"%ERT%U%\"").Value + "\r\n";
    33             sTemp += ComputeHelper.Compute("(\"QWERTYUIOP{}:\" LIKE \"%ERT%U\")?1111+1111:2222+2222").Value + "\r\n";
    34             sTemp += ComputeHelper.Compute("-2+5*(-2+7)").Value + "\r\n";
    35             sTemp += ComputeHelper.Compute("(REPLACE(REPLACE(\"AAAAAAAAKKK\",\"K\",\"M\"),\"A\",\"B\") == \"BBBBBBBBMMM\")?\"HHHHHHHHH\":\"IIIIIIIIII\"").Value + "\r\n";
    36             sTemp += ComputeHelper.Compute("3^4").Value + "\r\n";
    37             sTemp += ComputeHelper.Compute("81^(1/4)").Value + "\r\n";
    38 
    39             DateTime dt2 = DateTime.Now;
    40 
    41             Console.WriteLine(sTemp + "计算时间:" + (dt2 - dt1).TotalMilliseconds);
    42         }

    运行结果:

    True
    预运算: 3
    
    1000
    226665
    1177
    986
    5
    72960894
    1699065
    7787130
    673764
    5648928
    50
    222
    True
    222
    13
    -4.83333333333333
    -4.83333333333333
    True
    4444
    23
    HHHHHHHHH
    81
    3
    计算时间:9.0006 (毫秒)

    ------------------------------------------------------------------------------------

     1         [Test]
     2         public void TestComputeBooleanExpres()
     3         {
     4             string none = ComputeHelper.ComputeBoolean("True AND False OR True").ToString();
     5             string none2 = ComputeHelper.ComputeBoolean("((REPLACE(\"CCC\",\"A\",\"B\")==\"BBB\"?200:100)>150)").ToString();
     6             Console.WriteLine("预运算: " + none + " " + none2);
     7             DateTime dt1 = DateTime.Now;
     8             string sTemp = string.Empty;
     9 
    10             sTemp += ComputeHelper.ComputeBoolean("\"AABBCC\" LIKE \"%BB%\"") + "\r\n";
    11             sTemp += ComputeHelper.ComputeBoolean("\"AABBCC\" LIKE \"%BB%\" AND 300>100") + "\r\n";
    12             sTemp += ComputeHelper.ComputeBoolean("\"AABBCC\" LIKE \"%BB%\" AND 50>100") + "\r\n";
    13             sTemp += ComputeHelper.ComputeBoolean("\"AABBCC\" LIKE \"%BB%\" AND 100>=100") + "\r\n";
    14             sTemp += ComputeHelper.ComputeBoolean("\"AABBCC\" LIKE \"%BB%\" AND 100>100") + "\r\n";
    15             sTemp += ComputeHelper.ComputeBoolean("\"AABBCC\" LIKE \"%BB%\" OR 100>=100 OR \"错误\"") + "\r\n";
    16             //sTemp += ComputeHelper.ComputeBoolean("\"AABBCC\" LIKE \"%BB%\" AND 100>=100 AND \"错误\"") + "\r\n";
    17             sTemp += ComputeHelper.ComputeBoolean("(True OR \"错误\") AND (100>200 AND 300>100)") + "\r\n";
    18             sTemp += ComputeHelper.ComputeBoolean("(300>200 OR \"错误\") AND ((REPLACE(\"AAA\",\"A\",\"B\")==\"BBB\"?200:100)>150)") + "\r\n";
    19 
    20 
    21             DateTime dt2 = DateTime.Now;
    22 
    23             Console.WriteLine(sTemp + "计算时间:" + (dt2 - dt1).TotalMilliseconds);
    24             Console.ReadLine();
    25 
    26         }

    运行结果:

    预运算: True False
    True
    True
    False
    True
    False
    True
    False
    True
    计算时间:3.0002

    ------------------------------------------------------------------------------------

     1         [Test]
     2         public void TestComputeBooleanList()
     3         {
     4             List<UserInfo> list = new List<UserInfo>();
     5             List<UserInfo> listUser = GetUserInfo();
     6             DateTime dt1 = DateTime.Now;
     7             ComputeExecuter executer = new ComputeExecuter("UserAge>=20 AND LEN(UserName)>=3 AND REPLACE(UserName,\"舒\",\"龙\") LIKE \"龙%龙\"", true, typeof(UserInfo), string.Empty, true, false, true);
     8             foreach (UserInfo user in listUser)
     9             {
    10                 bool result = executer.ComputeBoolean(user);
    11                 if (result)
    12                     list.Add(user);
    13             }
    14             DateTime dt2 = DateTime.Now;
    15             string resultStr = GetUserInfos(list);
    16             Console.WriteLine(resultStr);
    17             Console.WriteLine("预运算:" + (dt2 - dt1).TotalMilliseconds);
    18 
    19             list.Clear();
    20             dt1 = DateTime.Now;
    21             executer = new ComputeExecuter("UserClassName == \"Y2T01\"", true, typeof(UserInfo), string.Empty, true, false, true);
    22             foreach (UserInfo user in listUser)
    23             {
    24                 bool result = executer.ComputeBoolean(user);
    25                 if (result)
    26                     list.Add(user);
    27             }
    28             dt2 = DateTime.Now;
    29             resultStr = GetUserInfos(list);
    30             Console.WriteLine(resultStr);
    31             Console.WriteLine("正式运算:" + (dt2 - dt1).TotalMilliseconds);
    32 
    33             list.Clear();
    34             executer = new ComputeExecuter("UserAge>=@UserAge AND UserName LIKE @UserName", true, typeof(UserInfo), string.Empty, true, false, true);
    35             dt1 = DateTime.Now;
    36             IgnoreHashtable ht = new IgnoreHashtable {{"@UserAge", 20}, {"@UserName", "%舒%"}};
    37             foreach (UserInfo user in listUser)
    38             {
    39                 bool result = executer.ComputeBoolean(user, ht);
    40                 if (result)
    41                     list.Add(user);
    42             }
    43             dt2 = DateTime.Now;
    44             resultStr = GetUserInfos(list);
    45             Console.WriteLine(resultStr);
    46             Console.WriteLine("正式运算:" + (dt2 - dt1).TotalMilliseconds);
    47 
    48             list.Clear();
    49             dt1 = DateTime.Now;
    50             ht = new IgnoreHashtable { { "@UserAge", 18 }, { "@UserName", 3 } };
    51             foreach (UserInfo user in listUser)
    52             {
    53                 bool result = executer.ComputeBoolean(user, ht);
    54                 if (result)
    55                     list.Add(user);
    56             }
    57             dt2 = DateTime.Now;
    58             resultStr = GetUserInfos(list);
    59             Console.WriteLine(resultStr);
    60             Console.WriteLine("正式运算:" + (dt2 - dt1).TotalMilliseconds);
    61 
    62 
    63         }
    64 
    65 
    66         public static List<UserInfo> GetUserInfo()
    67         {
    68             List<UserInfo> list = new List<UserInfo>()
    69                                     {
    70                                         new UserInfo("舒小龙","Y2T01001",20,Convert.ToDateTime("1989-11-27"),"Y2T01","应城市",5500),72                                         new UserInfo("陈雪琴","Y2T03002",19,Convert.ToDateTime("1990-09-01"),"Y2T03","孝感市",6000),
    73                                         new UserInfo("尹华伟","Y2T04003",19,Convert.ToDateTime("1990-11-01"),"Y2T03","孝感市",12000),
    74                                         new UserInfo("舒珊","G2T09001",18,Convert.ToDateTime("1992-09-18"),"G2T09","应城市",200),
    75                                         new UserInfo("无窗帘","G2T09002",18,Convert.ToDateTime("1992-10-02"),"G2T09","孝昌",-300),
    76                                         new UserInfo("吴文","G2T05001",18,Convert.ToDateTime("1991-02-03"),"G2T05","安陆市",4000),
    77                                         new UserInfo("李欢","XG009001",20,Convert.ToDateTime("1990-01-01"),"XG009","孝感市",7000),
    78                                         new UserInfo("HYS","NC008001",19,Convert.ToDateTime("1990-07-19"),"NC008","应城市",500),
    79                                         new UserInfo("毛三","Y2T01001",20,Convert.ToDateTime("1989-01-01"),"Y2T01","应城市",0),
    80 
    81                                     };
    82             return list;
    83         }
    84 
    85         public static string GetUserInfos(IList<UserInfo> list)
    86         {
    87             if (list == null || list.Count <= 0) return string.Empty;
    88             StringBuilder sb = new StringBuilder();
    89             foreach (UserInfo user in list)
    90                 sb.AppendLine(user.ToString());
    91             return sb.ToString();
    92         }

     运行结果:

    舒小龙    Y2T01001    20    1989-11-27 00:00:00    Y2T01    应城市    5500
    
    预运算:836.0478
    舒小龙    Y2T01001    20    1989-11-27 00:00:00    Y2T01    应城市    5500
    毛三    Y2T01001    20    1989-01-01 00:00:00    Y2T01    应城市    0
    
    正式运算:2.0001
    
    正式运算:3.0002
    
    正式运算:1

     

     

  • 相关阅读:
    开心网注册详解和邀请码发放
    3COM 905TX 配置
    SQL使用
    JDBC的使用
    kiko日记几个月以来工作总结2010 1124
    talk about the history of JAZZ
    这几个月的工作任务
    工作间期的不足
    转: mac使用nvm管理多个版本node
    负载均衡与ssl证书
  • 原文地址:https://www.cnblogs.com/shuxiaolong/p/2901784.html
Copyright © 2020-2023  润新知