【问题标题】:How to remove elements from a 2D String in C#?如何从 C# 中的 2D 字符串中删除元素?
【发布时间】:2016-10-11 09:17:46
【问题描述】:

我的二维数组有句子、它们的标记和它们的标签。我想删除除名词和动词以外的所有其他标签。我想删除不是动词/名词的整个索引。现在我的代码只是在该索引上放置一个空值。但我希望从数组中删除该索引。我的代码是:

HashSet<String> tagsToRemove = new HashSet<String>() { "'NN'", "'NNS'", "'VBD'", "'VBG'", "'VBZ'", "'VB'" };

for (int i = 0; i < array2D_of_tags.GetLength(0); ++i)
{
    if (!tagsToRemove.Contains(array2D_of_tags[i, 2]))
        array2D_of_tags[i, 2] = null;

    //Console.WriteLine(array2D_of_tags[i, 2]);
}

这是 array2D_of_tags 中的数据:

 A supplier supplies many parts. | 'A' | 'DT' | 
 A supplier supplies many parts. | 'supplier' | 'NN' | 
 A supplier supplies many parts. | 'supplies' | 'NNS' | 
 A supplier supplies many parts. | 'many' | 'JJ' | 
 A supplier supplies many parts. | 'parts' | 'NNS' | 
 A supplier supplies many parts. | '.' | '.' | 

【问题讨论】:

  • array2D_of_tags 中添加数据示例会很有帮助。请显示输入数据和预期输出。它会使问题更清楚。请将此数据添加到问题本身:)
  • 如果从 2x2 数组中删除一项,新数组的大小是多少?
  • 数组看起来像:供应商提供许多零件。 | '一个' | 'DT' |供应商提供许多零件。 | '供应商' | 'NN' |供应商提供许多零件。 | '供应' | 'NNS' |供应商提供许多零件。 | '很多' | 'JJ' |供应商提供许多零件。 | '零件' | 'NNS' |供应商提供许多零件。 | '。' | '。' |
  • 根据How to delete a row from a 2d array in c#?Delete row of 2D string array in C#,唯一的办法就是新建一个替换旧的。
  • 如果您只需要从 inner 数组中动态删除元素,那么也许可以考虑使用 List(T)[] (如果您确实需要修改外部数组,那么可以使用一个列表(列表(T)))

标签: c# arrays string


【解决方案1】:

无法删除索引,因为数组的大小是固定的。 如果您想通过保留数据结构来完成此操作,则必须创建一个包含所需数据的新数组。 你可以这样写:

string[,] array2D_of_tags = new string[,]
    {
        {"A", "DT"}, {"supplier", "NN"}, {"supplies", "NNS"}, {"many", "JJ" }
    };

    HashSet <string> tagsToRemove = new HashSet<string> { "'NN'", "'NNS'", "'VBD'" };
    int rowsToKeep = array2D_of_tags.GetLength(0) - tagsToRemove.Count;

    string[,] newArr2d = new string[rowsToKeep, array2D_of_tags.GetLength(1)];
    int currentRow = 0;
    for (int i = 0; i < array2D_of_tags.GetLength(0); i++)
    {
        if (!tagsToRemove.Contains(array2D_of_tags[i, 2])) //I didn't understand this, i take it from your code
        {
            for (int j = 0; j < array2D_of_tags.GetLength(1); j++)
            {
                newArr2d[currentRow, j] = array2D_of_tags[i, j];
            }
            currentRow++;
        }
    }

【讨论】:

  • 但是,我真的建议您更改数据结构。看看字典。他们已经实现了这种方法。看看in this website:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多