【问题标题】:convert numbers in string to double array few code lines c# [duplicate]将字符串中的数字转换为双数组几行代码c# [重复]
【发布时间】:2016-09-24 13:39:01
【问题描述】:

我的字符串包含三个数字seperated by comma or by space

例如:"3,3,3" or "3 3 3"

字符串还可以在数字之间或字符串的开头\结尾处包含空格。

我想insert them into array

我做到了:

this.ang[0] = Convert.ToDouble(ang.Trim().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)[0]);
this.ang[1] = Convert.ToDouble(ang.Trim().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)[1]);
this.ang[2] = Convert.ToDouble(ang.Trim().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)[2]);

如何用更少的代码行将数据插入到数组中?

谢谢!

【问题讨论】:

  • 将您的转换逻辑移动到一个方法中,并使用forforeach 循环来填充数组。
  • @Sylverac 没有循环的任何方式吗?
  • 感谢@JohnnyMopp 这解决了我的问题
  • @Programmer 是的,只需手动完成每个任务。即ang[0] = MyConversionMethod(inputString);ang[1] = MyConversionMethod(inputString);

标签: c# arrays split data-manipulation


【解决方案1】:

String.Split() 方法已经返回一个数组,因此您可以执行拆分并使用 LINQ 的 Select() 方法将每个值解析为双精度值并将这些值存储在一个数组中:

// This will store the double value for each of your elements into an array
this.ang = ang.Trim().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
                     .Select(x => Convert.ToDouble(x))
                     .ToArray();

如果您无法显式设置this.ang 数组,则可以将先前的结果存储在一个变量中,并根据需要使用它来设置各个值。

示例

你可以see a working example of this in action here

【讨论】:

    【解决方案2】:

    你尝试使用 Linq

     String ang = "3,3,3"; 
    
     double[] result = ang
       .Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
       .Select(item => Convert.ToDouble(item))
       .ToArray();
    

    【讨论】:

      【解决方案3】:

      已经建议的答案假设您可以重新分配整个数组ang。如果不能,则必须通过for迭代:

      var splitString = ang
          .Trim()
          .Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
      
      for(int i = 0; i < 3; i++)
      {
          this.ang[i] = Convert.ToDouble(splitString[i]);
      }
      

      【讨论】:

      • Magic value 3 in i &lt; 3 看起来很丑; i &lt; this.ang.Length?
      • 当然。也许在未来ang 将有 5 或 10,000 个双打,所以也许你可以更概括它,制作像 public const int ANG_LENGHT = 3 这样的常量;
      【解决方案4】:
      var ang = "3,3,3"; // or "3 3 3";
      var res = ang.Trim().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
                          .Select(x => Convert.ToDouble(x))
                          .ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        • 2013-07-24
        相关资源
        最近更新 更多