我有一个外部List BigList,然后在我的switch语句中我有一堆其他List的smallList变量。 当我在我的交换机中遇到这些情况时,我想将它们添加到BigList中 但我也不想添加重复的内容。 我们怎么做?
private List<string> MyMethod()
{
List<string> BigList = null;
for each( string name in MyListOfStringsThatComesIn)
{
tName = name;
switch(tName)
{
case "dsdds":
// List<string> smallerList;
// add it to BigList
case "fdfdf":
// List<string> smallerList2;
// add it to BigList
case "vbbughb":
// List<string> smallerList3;
// add it to BigList
答案 0 :(得分:4)
如果不允许重复,我会首先使用HashSet<string>
:
HashSet<string> bigSet = new HashSet<string>();
// add strings ...
如果您想将整个List<string>
添加到集合中,可以在循环中使用bigSet.Add
或HashSet.UnionWith
:
case "dsdds":
bigSet.UnionWith(smallerList);
如果您需要返回列表,可以使用
return new List<string>(bigSet);
答案 1 :(得分:1)
根据另一个的唯一值创建新列表:
List<string> BigList = MyListOfStringsThatComesIn.Distinct().ToList();
要从其他列表添加新的唯一值:
//assume the BigList contains something already...
BigList.AddRange(BigList.Except(MyListOfStringsThatComesIn));
答案 2 :(得分:1)
嗯,这可能是一种更有效的方式来做你想要的,但根据你所展示的内容,你可以:
查找不存在于父列表中的字符串:
BigList.AddRange(smallerList.Except(BigList));
或者只是将它们全部添加(允许重复)并在结尾处调用Distinct
:
BigList.AddRange(smallerList);
...
///add other lists
BigList = BigList.Distinct().ToList();
此外,您可能应该将列表初始化为空列表,而不是null
:
List<string> BigList = new List<string>();