C# 使用循环填充二维阵列
我正试图解析文件(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]==“^~\&”),但如果确实需要: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”} 我收到
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];
}