我正在尝试从文件-HL7消息段中解析管道分隔的文本行,以使该段成为HL7消息对象的属性。
我认为我从根本上不了解n维数组的概念...
该段看起来像这样
MSH | ^〜\&|| X530 ^ X530 ^ FID | ERIC ^ NSCC ^ RSSI | NSCCH | ....
我要这样创建一个数组;
数组中的第一项= {“ 0”,“ MSH”}
数组中的下一项= {“ 1,”,“ ^〜\&”}
数组中的下一项= {“ 2,”,空}
数组中的下一项= {“ 3,”,“ X530 ^ X530 ^ FID”}
我收到错误消息:
metadata
答案 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();
答案 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;
}