1

我有一个List<List<string>>信息;里面有 3 个其他列表。我需要能够对这些子列表中的每一个做三件单独的事情。我如何访问每个子列表?

为了更清楚起见,列表被添加到主列表中,如下所示

infomration.Add(sublist1);//where each sublist is a List<string> and information is a <List<List<string>>
infomration.Add(sublist2);
infomration.Add(sublist3);
reutrn information;
4

5 回答 5

3

您希望对列表中的 3 个元素(列表)执行 3 个单独的操作。既然Lists被索引了,为什么不直接以这种方式访问​​它们呢?

PerformOperationOne(myListofLists[0]);
PerformOperationTwo(myListofLists[1]);
PerformOperationThree(myListofLists[2]);
于 2012-12-03T10:58:00.740 回答
1

您可以使用Enumerable.ElementAt(或列表的简单索引器):

List<string> first = lists.ElementAt(0);
List<string> second = lists.ElementAt(1);
List<string> third = lists.ElementAt(2);

doSomethingWith(first);
doSomethingWith(second);
doSomethingWith(third);
于 2012-12-03T11:00:14.987 回答
0
    List<List<string>> lists = new List<List<string>>();
    lists.ForEach(i =>
    {
        i.Count();//do something
    });
于 2012-12-03T10:56:54.507 回答
0

如果您需要单独访问每个列表,则可能应该使用 a Dictionary<string,List<string>>,但由于您需要对每个列表执行不同的操作,因此最好使用三个单独的列表,而不是将它们全部放入一个组合结构中。

这将允许您通过一个键访问每个列表。

var aList = myDictionary["the wanted list key"];

但是,如果您知道内部列表的索引,则可以通过索引访问它们:

var anInnerList = listOfLists[0];
于 2012-12-03T10:57:16.637 回答
0

对集合中的所有列表执行相同的操作

foreach(List<string> list in information) {
    DoSomething(list);
}

但是,如果您需要对每个项目执行不同的操作,您可以按照以前的解决方案指定一个索引 - 或者,对于额外的功能,您可以将它放在一个开关中以对每个实体执行多个不同的操作。

int counter = 0;
foreach(List<string> list in information) {
    switch(counter) {
        case 0:
            // First action
            list = DoSomething(list);
            break;
        case 1:
            // Second action
            list = DoSomethingElse(list);
            break;
        case 2:
            // Third action
            list = DoSomethingWeird(list);
            list = DoAnotherThing(list);
            break;
        default:
            // Do something if there's more than 3 items in the list
            SendErrorReport();
            break;
    }
    counter++;
}
于 2012-12-03T11:27:28.833 回答