如何在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");
                }

如何在c#中获得2D数组的长度?length和GetLength没有帮助

错误太多:

  • 错误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。