c# - 仅转换特定值的有效方法

标签 c# .net parsing casting rounding

所以假设我有一个字符串数组:

string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };

假设我必须遍历这些值并执行以下操作:
  • 将它四舍五入到最接近的偶数(如果它只是 double 数)
  • 四舍五入后删除数字的小数部分。
  • 如果数字为负数,请删除符号。

  • string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };
    
    for (int i = 0; i < values.Length; i++)
    {
        file[i].Value = ((Int32)Math.Abs(Math.Round(Double.Parse(values[i]), MidpointRounding.ToEven))).ToString();
    }
    

    这与这样做基本相同:
    string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };
    
    for (int i = 0; i < values.Length; i++)
    {
        String strValue = values[j];
        Double dblValue = Double.Parse(strValue);
        Double dblRoundedValue = Double.Parse(dblValue);
        Int32 intValue = (Int32)dblRoundedValue;
        Int32 intAbsValue = Math.Abs(intValue);
        String finalValue = intAbsValue.ToString();
    
        file[i].Value = finalValue;
    }
    

    该数组中可能有超过一百万个值,那么有没有办法让这个过程更有效率?

    最佳答案

    这个操作本质上是可并行的(如果这是一个词)。一个 Parallel.ForEach循环、并行 Linq 管道或类似的东西,会缩短执行时间。

    string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };
    
    var file = values.AsParallel()
                     .Select(s => Double.Parse(s))
                     .Select(d => (int)Math.Round(d))
                     .Select(i => Math.Abs(i).ToString())
                     .ToArray();
    

    关于c# - 仅转换特定值的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024290/

    相关文章:

    c# - 我怎样才能防止我的已编译库的用户查看代码?

    c# - 如何检索事件的所有方法?

    c# - 如何检查 Windows 壁纸是否已更改

    python - Python 的 NLTK 中的荷兰语语法

    json - Powershell将txt文件的列转换为JSON格式

    c# - 枚举应该以 0 还是 1 开头?

    c# - 对象数组未按预期交付

    c# - WCF是否缓存存储过程

    c# - 如何获取和安装根 CA 证书

    c++ - 如何测试字符串是否是有效的 C++(ish) 表达式?