C# 使用循环填充二维阵列

C# 使用循环填充二维阵列,c#,arrays,parsing,hl7-v2,C#,Arrays,Parsing,Hl7 V2,我正试图解析文件(HL7 message segment)中以管道分隔的文本行,以使该段成为HL7 message对象的属性 我想我根本不理解n维数组的概念 这个片段看起来像这样 MSH ^ ~\&^ X530 ^ X530 ^ FID ^ ERIC ^ NSCC ^ RSSI ^ NSCCH ^ 我想创建一个数组 数组中的第一项={“0”,“MSH”} 数组中的下一项={1,,“^~\&”} 数组中的下一项={2',null} 数组中的下一项={“3,,“X530^X530^FID”} 我收到

我正试图解析文件(HL7 message segment)中以管道分隔的文本行,以使该段成为HL7 message对象的属性

我想我根本不理解n维数组的概念

这个片段看起来像这样

MSH ^ ~\&^ X530 ^ X530 ^ FID ^ ERIC ^ NSCC ^ RSSI ^ NSCCH ^

我想创建一个数组

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

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

数组中的下一项={2',null}

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

我收到错误消息:

您不需要2d数组(矩阵)来解析它(调用fieldAndIndex[n]只会给出它的值-fieldAndIndex[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;
            fieldAndIndex [i][1] = field;
            i++;
        }

        return fieldAndIndex;
    }

为了理解你的情况下的基本数组,你可以考虑数组是一个2D矩阵。类似地,你可以考虑一个3D数组一个立方体。您要做的是在一个位置添加两个项目

fieldAndIndex [i,i] = {{ i,field} };
因此,在第一次迭代期间,符号[i,i]的计算结果为[0,0],这意味着第一行中的第一个元素。 插入这两者的正确方法可以按照给定答案所示进行

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

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

但我不明白您为什么需要二维阵列

新字符串[arrayLength,1]应该是
新字符串[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;
}

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];
}
for(int i=0;i
另外,我认为2D阵列不适合这里。存储每个元素的索引(这似乎是您试图做的)是不必要的,因为
fieldAndIndex[x,0]
将始终与
x
相同

您可能需要使用一个简单的1D数组。还有其他可能有用的数据结构:

  • 字典
  • (int,string)[]
  • string[][]

为什么需要2d阵列?
string[,] fieldAndIndex = new string[arrayLength, 2];
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];
}