我有一个List<List<string>> Full
,由
for(...){
Full.Add(new List<string>());
Full[ListIndex].Add(string1);
Full[ListIndex].Add(string2);
Full[ListIndex].Add(string3);
...
}
可被读取
string2 = Full[sublistX][element1];
一个List<string> Strings
包含一些string2
的示例
我想创建一个新的List<List<string> NewList
,它只包含Full[sublistX][element1]
的子列表,它等于List<string>Strings
中的任何元素
例如,
List<List<string>> Full = new List<List<string>>()
{
new List<string>() { "11", "AA", "!!", },
new List<string>() { "22", "BB", "@@", },
new List<string>() { "33", "CC", "##", },
new List<string>() { "44", "DD", "$$", },
};
List<string> Strings = new List<string>()
{
"AA", "DD",
};
我希望List<List<string> NewList
包含:
sublist0: "11", "AA", "!!"; //match "AA"
sublist1: "44", "DD", "$$"; //match "DD"
现在,我可能是用一种愚蠢的方式(硬编码)
List<List<string>> Full;
List<string> Strings;
List<List<string>> NewList;
for (int i = 0; i < Full.Count; i++)
{
if (Strings.Contains(Full[i][4]))
{
NewList.Add(new List<string>());
NewList[ListIndex].Add(Full[i][0]);
NewList[ListIndex].Add(Full[i][1]);
NewList[ListIndex].Add(Full[i][2]);
NewList[ListIndex].Add(Full[i][3]);
NewList[ListIndex].Add(Full[i][4]);
NewList[ListIndex].Add(Full[i][5]);
NewList[ListIndex].Add(Full[i][6]);
NewList[ListIndex].Add(Full[i][7]);
NewList[ListIndex].Add(Full[i][8]);
NewList[ListIndex].Add(Full[i][9]);
ListIndex++;
}
}
我的问题是:有没有更好的方法?
我认为可能有两点需要优化:
1.避免使用for()
遍历整个列表“Full”,特别是当“Full”包含很多子列表而“String”只有很少的元素时。
1.从代码中可以看到,现在每个子列表中有10个元素,将来可能会增加/减少,但我硬编码了NewList[ListIndex].Add
,从索引0到9。有没有办法获得子列表元素的计数?这样我就可以使用for(sublist elements count)
添加NewList。
4条答案
按热度按时间vmjh9lq91#
您可以使用
Intersect
...Any
:如果列表很大,这比
Contains
的性能更好。fwzugrvs2#
您可以按如下方式使用Linq:
这将给予你一个列表,它包括
Full
至少有一个元素被Strings
列表包含的任何列表。Fiddle
2nc8po8w3#
vzgqcmou4#
我觉得这样读起来更好一点: