这是我的代码。我想从我的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");
}
答案 0 :(得分:1)
你得到的错误太多了:
len = len1 * len2
:*
而不是+
; 7 x 3
数组包含7 * 3 == 21
个项目for (int i = 0; i < len1; i++)
,而不是i <= len1
。if
逻辑:您当前的实施会将所有 [i, 1]
项设置为null
。Sonething喜欢这样(消除标签):
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");
答案 1 :(得分:0)
For循环应该是
for (int i = 0; i < len1;i++ )
因为长度给出的总大小和索引从零开始。所以最后一个索引将是总长度 - 1。
e.g。
int[] a = {1,2,3,4}
的长度为4,但索引为3。
答案 2 :(得分:0)
尝试将for (int i = 0; i <= len1;i++ )
替换为for (int i = 0; i < len1; i++)
这背后的原因是Length从1开始计数到总长度,但是数组的索引从0开始,因此如果你试图访问数组[len1],你会得到这个异常。
答案 3 :(得分:0)
正确的循环应该是:
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
在上面的示例中,值存储为:
因此,在这种情况下,循环将从0执行到4,这比数组的长度小1。