获取一维数组的值并将其放入一维数组

时间:2019-04-28 14:48:24

标签: c#

我有一个上面有记录的数组,但是它是一个更维数组。现在,我只希望每个维度都有两个值。我想将它们放在两个独立的数组中。所以我的问题是如何将一维数组中的多维数组的值放进去。 data0下面的代码是我的一维数组,我要在其中放置多维数组每个部分的第一个值。

我想将myrecords [0](多数组)放在data0 [0](一个数组)中。 enter image description here

string path = "C:\\Users\\elyag\\Dropbox\\A Thesis\\Programma C#\\Programma_voor_User_interface_wijziging\\C#\\bin\\breng hier data in\\1000 1000\\DebugDT9857E_channel0_Channel1metfoam.txt";
string[] lines = File.ReadAllLines(path);
double[] data0 = new double[numberOfBuffers*samplesperbuffer];
// string[] lines = File.ReadAllLines("path");

string[][] myRecords = new string[numberOfBuffers * samplesperbuffer][];
int k = 0;
foreach (var line in lines)
{
    var values = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 1; i < values.Length; i++)
    {
        if (myRecords[k] == null) myRecords[k] = new string[values.Length + 1];
        myRecords[k][i] = values[i];
        data0[i] = Convert.ToDouble(myRecords[i][0]);
    }
    k++;
}

1 个答案:

答案 0 :(得分:0)

更好的解决方案是将值放入列表中。与数组不同,列表在添加项目时会自动增长

如果数据必须包含所有值

var data = new List<double>();
foreach (string line in lines)
{
    string[] values = line.Split(new char[]{' '},
                                 StringSplitOptions.RemoveEmptyEntries);
    foreach (string value in values)
    {
        data.Add(Convert.ToDouble(value));
    }
}
double[] dataArray = data.ToArray();

如果数据必须仅包含每行的第一个值

var data = new List<double>();
foreach (string line in lines)
{
    string[] values = line.Split(new char[]{' '},
                                 StringSplitOptions.RemoveEmptyEntries);
    if (values.Length > 0) { // Just in case the last line is empty.
        data.Add(Convert.ToDouble(values[0]));
    }
}
double[] dataArray = data.ToArray();

您的代码非常混乱,因为您正在创建一个长度为numberOfBuffers * samplesperbuffer并且每个元素都包含另一个数组的数组。也就是说,总共将包含numberOfBuffers * samplesperbuffer * lengthOfSingleLines个元素。这是你想要的吗?还是最终的一维数组仅包含numberOfBuffers * samplesperbuffer个元素,其中samplesperbuffer是每行文本的值数量?

在这种情况下,您可以更改示例以直接生成最终数组

var data = new double[numberOfBuffers * samplesperbuffer];
int k = 0;
foreach (string line in lines)
{
    string[] values = line.Split(new char[]{' '},
        StringSplitOptions.RemoveEmptyEntries);
    foreach (string value in values)
    {
        data[k++] = Convert.ToDouble(value));
    }
}

另请参阅:Multi-dimensional and Jagged Arrays