关于c#:将一个列表中的字符串列表添加到另一个列表中


Adding list of strings from one list to another list

我有一个外部列表biglist,然后在switch语句中,我有一组其他的列表小列表变量。当我在交换机中处理这些情况时,我想把它们添加到biglist中。但我也不想添加重复的。我们怎么做?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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


如果不允许重复,我会首先使用HashSet

1
2
HashSet<string> bigSet = new HashSet<string>();
// add strings ...

如果要将整个List添加到集合中,可以在循环中使用bigSet.AddHashSet.UnionWith

1
2
case"dsdds":
   bigSet.UnionWith(smallerList);

如果需要返回列表,可以使用

1
return new List<string>(bigSet);


嗯,也许有一种更有效的方法来做你想做的事情,但是根据你所展示的,你可以:

查找父列表中不存在的字符串:

1
BigList.AddRange(smallerList.Except(BigList));

或者把它们全部加起来(允许重复),然后在末尾调用Distinct

1
2
3
4
5
6
BigList.AddRange(smallerList);
...
///add other lists


BigList = BigList.Distinct().ToList();

另外,您可能应该将您的列表初始化为空列表,而不是null

1
List<string> BigList = new List<string>();


要基于另一个列表的唯一值创建新列表,请执行以下操作:

1
List<string> BigList = MyListOfStringsThatComesIn.Distinct().ToList();

要从其他列表添加新的唯一值:

1
2
//assume the BigList contains something already...
BigList.AddRange(BigList.Except(MyListOfStringsThatComesIn));