C#中的list<string, list<string>>如何使用?

6

我在网上花了一些时间寻找解决方案,但是我的C#技能处于初学者水平,我没有找到任何方法来实现我想要的功能。

这就是情况:

我有一个Web服务,它会向我返回一个对象,在这个对象中有一个二维表。我想做的是遍历这个表并将这些值放入一个List中。为了说明这一点,这里有一个例子和我已经拥有的东西:

// creation of a list like : List <String, List<String>> myList
for (int i = 0; i < outPut.errors.Length; i++)
{
    string error = outPut.errors[i].data.label;
    //myList.add(error);
    if (outPut.errors[i].data.label != "" && outPut.errors[i] != null)
    {
         for (int j = 0; j < outPut.errors[i].data.corrections.Length; j++)
         {
              string corrections  = outPut.errors[j].data.corrections[0][j].ToString();
              //myList.add(corrections)
         }  
    }
}

在这个例子中,我创建了一个二维列表,其中第一个参数是String,第二个参数是List(就像一个二维表格会有tab[x][y],其中一个X有多个Y)。

显然,在C#中,您必须知道确切的大小才能创建二维表,而我们永远不会知道这个表的大小。

那么,是否可能创建一个我想要的列表,还是应该用另一种方法?


1
你是指 List<List<string>> 吗?List 只有一个泛型参数。 - Kroltan
4
一个列表不能是二维的,它不是一个数组。只需创建一个封装类,该类具有string和*list<string>属性,然后使用该类型的对象来填充您的外部列表。更新:您当然可以使用Dictionary<string, List<string>>*,但遍历它需要更多的工作。 - Rob
1
你是在寻找 Dictionary<string, List<string>> 还是可以创建一个 DataTable - MattC
@Kroltan:顺便说一下,List<List<string>> 是完全有效的。 - Rob
@Robert,我尝试创建一个对象,但事实是我需要它保持为字符串而不是变成对象,因为我之后会将其发送到JavaScript进行操作。 - Slayner
显示剩余2条评论
2个回答

6
要创建一个二维列表,可以使用List<List<string>>来定义一个列表,其中每个条目都是包含字符串的列表。您需要在遇到每个“行”列表时创建它,它们不会自动为您创建。
然而,在这种情况下,这并不是您想要的,因为您有特殊的标签字段。在这种情况下,您应该创建一个带有字符串标签和列表的对象,然后将其列表化。或者,如果您预计按其标签查找东西,并且不会有重复的标签,则可以考虑使用Dictionary<string, List<string>>

是的,我已经尝试过List<List<string>>,但我需要保持labal与List<string>相关联的事实,就像你之前说的那样。因为在我将它们添加到myList之前,我会删除所有重复项,所以我得到的表中不会有重复项。我会寻找Dictionary的用法,如果你有例子,我很乐意看看它到底是做什么的。 - Slayner
很多在线示例,快速谷歌搜索可以找到这个例如:http://www.learncs.org/en/Dictionaries - Tim B
1
请注意,字典将非常轻松地处理检测重复项的工作。 - Tim B
根据我已经在字典中找到的内容,它似乎是我需要的东西,但我有一个问题,就是是否可以在最后返回字典?(因为之后我需要将其发送回我的Javascript,以便我可以处理它)。 - Slayner
将它们返回:是的。将它们传回 JavaScript:我想应该可以。这不是我常用的东西(我不常用 C#),但我确信是可能的。如果您在此过程中遇到问题,请另外提问,实现方式会根据您使用的框架而异。 - Tim B
好的,非常感谢,我会绕过这个问题并找到解决方法。如果在几天内无法成功完成JavaScript部分,我会再发一个问题,但现在是时候自己动手了。 - Slayner

3

或者如果列不需要排序,可以使用 Dictionary<string, List<string>> - Kroltan
列不需要被排序,如果我用元组理解正确的话,我可以像这样拥有一个 Tuple <string, string[]> = ... 而且在没有给出表格大小的情况下,如何为第二个参数创建一个表格? - Slayner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接