使用循环填充2D数组

时间:2019-08-16 07:02:46

标签: c# arrays parsing hl7-v2

我正在尝试从文件-HL7消息段中解析管道分隔的文本行,以使该段成为HL7消息对象的属性。

我认为我从根本上不了解n维数组的概念...

该段看起来像这样

  

MSH | ^〜\&|| X530 ^ X530 ^ FID | ERIC ^ NSCC ^ RSSI | NSCCH | ....

我要这样创建一个数组;

数组中的第一项= {“ 0”,“ MSH”}

数组中的下一项= {“ 1,”,“ ^〜\&”}

数组中的下一项= {“ 2,”,空}

数组中的下一项= {“ 3,”,“ X530 ^ X530 ^ FID”}

我收到错误消息:

error message

metadata

4 个答案:

答案 0 :(得分:3)

2D数组的每个子数组都有2个项(对吗?),因此您应该使用2而不是1作为长度:

string[,] fieldAndIndex = new string[arrayLength, 2];

由于您希望在循环中使用计数器变量I,因此不应使用foreach循环:

for (int i = 0 ; i < arrayLength ; i++) {
    // here you want the first item of the subarray to be i, and the second item to be the corresponding segment
    fieldAndIndex[i, 0] = i.ToString();
    fieldAndIndex[i, 1] = segmentFields[i];
}

此外,我认为2D阵列在这里不合适。不必存储每个元素的索引(这似乎是您想要做的),因为fieldAndIndex[x, 0]将始终与x相同!

您可能想使用一个简单的一维数组。还有其他可能有用的数据结构:

  • Dictionary<int, string>
  • (int, string)[]
  • string[][]

答案 1 :(得分:2)

要了解您所用的基本阵列,可以将其视为2D矩阵。同样,您可以将3D阵列视为一个立方体。您想要做的是将两个项目放在一个地方

fieldAndIndex [i,i] = {{ i,field} };

因此,在第一次迭代过程中,符号[i,i]的值为[0,0],表示第一行中的第一个元素。 正确插入这两者的方法可以通过给出的答案来完成

fieldAndIndex [i,i] = i.ToString();
fieldAndIndex [i,++i] = field.ToString();

我希望这可以解决您的问题,最好对多维数组进行一些研究。 ThisThis是开始使用这些阵列的一些很好的链接。

答案 2 :(得分:1)

 private string [] ParseSegment(string ms) //you do not need 2d array for that
    {
        int i = 0;
        string[] segmentFields = ms.Split('|');//fields for this segment
        int arrayLength = segmentFields.Length;
        string[] fieldAndIndex = new string[arrayLength];

        foreach (string field in segmentFields)
        {
            fieldAndIndex [i] = field;
            i++;
        }

        return fieldAndIndex;
    }

您不需要2d array(matrix)来解析它(调用fieldAndIndex [n]只会给出它的值-fieldAndIndex [1] ==“ ^〜\&”“),但是如果您确实需要:< / p>

    private string [,] ParseSegment(string ms) 
    {
        int i = 0;
        string[] segmentFields = ms.Split('|');//fields for this segment
        int arrayLength = segmentFields.Length;
        string[,] fieldAndIndex = new string[arrayLength,2];

        foreach (string field in segmentFields)
        {
            fieldAndIndex [i][0] = i;
            fieldAndIndex [i][1] = field;
            i++;
        }

        return fieldAndIndex;
    }

答案 3 :(得分:1)

虽然我不明白您为什么要2维数组。

new string[arrayLength,1];应该是new string[arrayLength,2];

[i,i]需要1个元素,而不是2个元素。另外,您需要使用[i,0][i,1]

private string [,] ParseSegment(string ms)
{
    int i = 0;
    string[] segmentFields = ms.Split('|');//fields for this segment
    int arrayLength = segmentFields.Length;
    string[,] fieldAndIndex = new string[arrayLength,2];

    foreach (string field in segmentFields)
    {
        fieldAndIndex [i,0] =  i.ToString();
        fieldAndIndex [i,1] =  field;
        i++;
    }

    return fieldAndIndex;
}