在C#中将string []转换为double [,]

时间:2014-02-17 06:17:25

标签: c# arrays

我的文本文件由以下数据组成:

1,2  
2,3  
3,4  
4,5  

现在我想将数据保存到数组中。所以我做了分裂:

using (streamreader sr = new streamreader("file.txt")) {
    string[] data = sr.ReadLine().Split(',');
}

但是我的数据保存在string []中,而我的GlobalDataClass数组声明为double[,]。像这样:

static class GlobalDataClass  
{
   public static double[,] Array = new double[4, 2];
}  

我需要将数据分配给GlobalDataClass:

GlobalDataClass.Array = data;

所以我的问题是如何将string[]转换为double[,]

7 个答案:

答案 0 :(得分:3)

由于你有一个二维数组,你需要遍历每一行并提取值,然后将其分配到正确的位置。您可以使用Selectdouble.Parse将字符串值转换为double。

using (var reader = new StreamReader("file.txt"))
{
    string line;
    for (var count = 0; count < 4; ++count)
    {
        var data = reader.ReadLine()
                         .Split(',')
                         .Select(v => double.Parse(v))
                         .ToArray();

        GlobalDataClass.Array[count,0] = data[0];
        GlobalDataclass.Array[count,1] = data[1];
    }
}

现在,如果你的数组真的是double[][],那么你可以做更多的事情:

GlobalDataClass.Array = File.ReadAllLines("file.txt")
                            .Select(l => l.Split(',')
                                          .Select(v => double.Parse(v))
                                          .ToArray())
                            .ToArray();

注意:我认为将它变成一个全局变量是一个非常糟糕的主意。可能有更好的方法来解决这个问题。

答案 1 :(得分:2)

我认为最好的方法是使用Array.ConvertAll。

示例:

string[] strs = new string[] { "1.00", "2.03" };
Array.ConvertAll(strs, Double.Parse);

答案 2 :(得分:2)

System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
int counter =0 ;
 while((line = file.ReadLine()) != null)
 {
    var lineData= line.Split(',');
    GlobalDataClass.Array[counter,0] =  double.Parse(lineData[0]);
    GlobalDataClass.Array[counter,1] =  double.Parse(lineData[1]);
    counter++;
}

答案 3 :(得分:1)

如果行数可以变化:

var lines = File.ReadAllLines("file.txt");
var data = new double[lines.Length, 2];

for (var i = 0; i < lines.Length; i++)
{
    var temp = lines[i].Split(',');
    data[i,0] = double.Parse(temp[0]);
    data[i,1] = double.Parse(temp[1]);
}

GlobalDataClass.Array = data;

..或者,如果行数是常数值:

using (var sr = new StreamReader("file.txt"))
{
    var i = 0;
    var len = GlobalDataClass.GetLength(0);

    while (sr.Peak() >= 0 && i < len)
    {
        var temp = sr.ReadLine().Split(',');
        GlobalDataClass.Array[i,0] = double.Parse(temp[0]);
        GlobalDataClass.Array[i,1] = double.Parse(temp[1]);
        i++;
    }
}

答案 4 :(得分:1)

double[] doubleArray = strArray.Select(s => Double.Parse(s)).ToArray();

int k = 0;

for (int i = GlobalDataClass.Array.GetLowerBound(0); i <= GlobalDataClass.Array.GetUpperBound(0); i++)
{
    for (int j = GlobalDataClass.Array.GetLowerBound(1); j <= GlobalDataClass.Array.GetUpperBound(1); j++)
    {
        double d = doubleArray[k];
        GlobalDataClass.Array.SetValue(d, i, j);
        k++;
    }
}

答案 5 :(得分:1)

试试这个:

String [] words;    
int lineCount=0;
String [] Lines=File.ReadAllLines(@"C:\Data.txt");
for (int i=0;i<Lines.Length;i++)
{
  words = Lines[i].Split(',');
  for (int j = 0; j < 2; j++)
  {
     GlobalDataClass.Array[i,j] = Convert.ToDouble(words[j].Trim());
  }
}

答案 6 :(得分:1)

我正在使用您的部分代码向您展示如何执行此任务。

int mCount = 0;
using (streamreader sr = new streamreader("file.txt")) {
    string[] data = sr.ReadLine().Split(',');
    GlobalDataClass.Array[mCount , 0] = Double.Parse(data[0]);
    GlobalDataClass.Array[mCount , 1] = Double.Parse(data[1]);
    mCount += 1;
}