优化这段c#代码

时间:2011-12-19 11:38:27

标签: c# optimization

问题:给定逗号分隔的数字字符串,想要找出数字的最高位数。 例如:考虑一串数字“123,345,555”,输出为5,因为5是123,345,555中的最高平均值。

这是我的程序..在C#

int Max_Avg(string number_list)
{
      int i;
        Int32 sum;
        Int32 max_avg = 0;
        int limit = 0;
        string[] num = number_list.Split(',');
        limit = num.Length;
        while (limit-- > 0)
        {
                i=0;
                sum = 0;
                while (i < num[limit].Length)
                {
                    sum += Convert.ToInt32(num[limit].Substring(i, 1));
                    i++;
                }
                int tmp=sum / num[limit].Length;
                if (tmp > max_avg)
                {
                    max_avg = tmp;
                }
        }
         return max_avg;
}

如果有任何人可以优化其性能或建议更优化的方法来加快它......

3 个答案:

答案 0 :(得分:8)

(针对可维护性/代码而非原始性能进行了优化)

return (int) number_list.Split(',')
       .Select(term => term.Average(c => (int) (c - '0'))).Max();

答案 1 :(得分:1)

我看到的唯一合理的速度优化是在这一行:

  

Convert.ToInt32(num [limit] .Substring(i,1));

这很慢 - 您将字符串按字符分割为子字符串,然后使用通用解析器。

子功能可以接受char,然后在10个有效的valeus(0-9)上进行SWITCH,或者直接将char的numberic值转换为数字。这是你所能做的一切。我认为COnvert.ToInt32方法过于通用,无法快速实现。

只有在你做了数千次这样的事情时才有意义,但是哎呀,我会在这样的优化时刻写数据解析器,这样会大大提高它们。

答案 2 :(得分:0)

int Max_Avg(string number_list)
{
    var result = 0;
    var sum = 0;
    var count = 0;
    for (var i = 0; i < number_list.Length; i++)
    {
       if (number_list[i] == ',')
       {
          if (count > 0)
          {
              result = math.Max(result, sum / count);
              sum = 0;
              count = 0;
          }
       }
       else
       {
          sum += number_list[i] - '0';
          count++;
       }
    }
    return result;
}
相关问题