如何在c#中获得2D数组的长度?length和GetLength没有帮助
本文关键字:length 有帮助 GetLength 数组 2D | 更新日期: 2023-09-27 18:06:04
这是我的代码。我想从我的2D数组中删除一些元素。为此,我运行了一个For循环。但不知道如何绑定循环,因为它一直给我错误,"索引是数组的边界之外"(如果我使用长度/GetLength)。:
int len1 = tagged_data.GetLength(0);
int len2 = tagged_data.GetLength(1);
int len = len1 + len2;
Console.WriteLine(len);
for (int i = 0; i <= len1;i++ )
{
if (tagged_data[i, 1] != "'NN'")//|| tagged_data[i, 1] != "'NNS'"|| tagged_data[i, 1] != "'VBD'" || tagged_data[i, 1] != "'VBG'" || tagged_data[i, 1] != "'VB'" || tagged_data[i, 1] != "'VBZ'")
{
tagged_data[i, 1] = null;
}
else if (tagged_data[i, 1] != "'NNS'")
{
tagged_data[i, 1] = "";
}
else if (tagged_data[i, 1] != "'VBD'")
{
tagged_data[i, 1] = "";
}
else if (tagged_data[i, 1] != "'VBG'")
{
tagged_data[i, 1] = "";
}
else if (tagged_data[i, 1] != "'VBZ'")
{
tagged_data[i, 1] = "";
}
else if (tagged_data[i, 1] != "'VB'")
{
tagged_data[i, 1] = "";
}
else
Console.Write("nothing to eliminate");
}
错误太多:
- 错误size:
len = len1 * len2
:*
代替+
;7 x 3
数组有7 * 3 == 21
项 - 错误的索引:
for (int i = 0; i < len1; i++)
,而不是i <= len1
。 - 错误的
if
逻辑:您当前的实现将设置所有[i, 1]
项为null
。
像这样(去掉标签):
String[,] tagged_data = ...
...
Console.WriteLine(tagged_data.Length);
HashSet<String> tagsToRemove = new HashSet<String>() {
"'NN'", "'NNS'", "'VBD'", "'VBG'", "'VBZ'", "'VB'",
};
for (int i = 0; i < tagged_data.GetLength(0); ++i)
if (tagsToRemove.Contains(tagged_data[i, 1]))
tagged_data[i, 1] = null;
else
Console.Write("nothing to eliminate");
如果你想保留标签:
Console.WriteLine(tagged_data.Length);
HashSet<String> tagsToPreserve = new HashSet<String>() {
"'NN'", "'NNS'", "'VBD'", "'VBG'", "'VBZ'", "'VB'",
};
for (int i = 0; i < tagged_data.GetLength(0); ++i)
if (!tagsToPreserve.Contains(tagged_data[i, 1]))
tagged_data[i, 1] = null;
else
Console.Write("nothing to eliminate");
For循环应为
for (int i = 0; i < len1;i++ )
,因为长度表示总大小,索引从0开始。所以最后一个索引将是总长度- 1。
。
int[] a = {1,2,3,4}
的长度为4,索引为3。
尝试将
for (int i = 0; i <= len1;i++ )
替换为
for (int i = 0; i < len1; i++)
这背后的原因是Length从1开始计数直到总长度,但是数组的索引从0开始,因此如果您试图访问数组[len1],您会得到这个异常。
正确的for循环应该是:
for(int i = 0; i < len1; i++)
要遍历数组,需要执行从0到(arrayLength - 1)的循环,因为数组索引从0开始,到(arrayLength - 1)
考虑这个数组:
int a[] = {1, 2, 3, 4, 5}; //Length: 5, Index range: 0 - 4
在上面的例子中,值被存储为:
- 1在索引0
- 2在索引1
- 5在索引4
因此,在这种情况下,循环将从0到4执行,这比数组的长度小1。