【问题标题】:Convert array of string to array of double将字符串数组转换为双精度数组
【发布时间】:2014-07-22 16:14:20
【问题描述】:

我有一个文本文件 (.txt) 带有一些十进制数:

0.3125
0.3
0.181818181818182
0.333333333333333
0.210526315789474
0.181818181818182

我想把这些数字带到双精度数组中。这是我的代码:

double[] f1 = Convert.ToDouble(File.ReadLines("decimal list.txt").ToArray());

但我得到了

的错误

不能将类型'double'隐式转换为'double[]'

【问题讨论】:

  • Convert.ToDouble 没有以double[] 作为参数的重载。您可能需要逐行读取文本文件并尝试解析每个值。
  • .Select 怎么样?

标签: c# arrays string file double


【解决方案1】:

您可以使用 Linq

  Double fi[] = File.ReadLines("list of stopword.txt")
                    .Select(x => Double.Parse(x, CultureInfo.InvariantCulture))
                    .ToArray();

【讨论】:

    【解决方案2】:
    File.ReadLines("decimal list.txt")
        .Select(l => Convert.ToDouble(l))
        .ToArray();
    

    【讨论】:

    • @GrantWinney 谢谢,确实如此。
    【解决方案3】:

    您收到错误是因为您试图将 double(Convert.ToDouble) 分配给 double[] 变量。相反,您必须解析每一行以加倍并创建一个数组。

    您可以使用 LINQ:

    double value = 0;
    double[] f1 = File.ReadLines("decimal list.txt")
        .Where(l => double.TryParse(l.Trim(), out value))  // skips invalid lines
        .Select(l => value)
        .ToArray();
    

    【讨论】:

      【解决方案4】:

      唯一匹配的Convert.ToDouble 重载是one that receives Object。与所有其他 ToDouble 重载一样,此函数返回 double

      public static double ToDouble(
          Object value
      )
      

      因此,您尝试将double 分配给double[],编译器告诉您它不能这样做。

      当然,如果您曾经将您的 string[] 数组传递给 Convert.ToDouble 重载,它会因运行时错误而失败,因为 Convert.ToDouble 期望接收单个值并返回单个值。它根本不会在一次调用中转换多个值。

      您需要做的是将文件中的每一行转换为双精度。一种有效的方法是使用 Linq 查询,如其他各种答案所示。

      【讨论】:

        【解决方案5】:

        您可以遍历字符串数组并使用 Double.Parse 或 Double.TryParse(如果您的字符串可能不会解析为数组中的双精度数)。

        【讨论】:

          【解决方案6】:

          类似的东西(未测试):

          string[] lines = File.ReadAllLines("decimal list.txt");
          List<doulbe> values = new List<double>();
          
          foreach(string line in lines)
          {
              double value;
          
              if (double.TryParse(line, out value))
              {
                  values.Add(value);
              }
          }
          

          【讨论】:

            【解决方案7】:

            这是因为 Convert.ToDouble 返回单个双精度值,而左侧有 double[](双精度变量数组)。

            试试吧:

            List<double> list = new List<double>();
            foreach(string line in File.ReadLines("list of stopword.txt"))
              list.Add(double.Parse(line));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-12-12
              • 1970-01-01
              • 2016-10-31
              • 1970-01-01
              • 2020-05-07
              相关资源
              最近更新 更多