C# 两个列表相交<;int>;有重复价值的
我有两个int类型的列表:C# 两个列表相交<;int>;有重复价值的,c#,C#,我有两个int类型的列表: List<int> list1 = new List<int> {12,55,55,55,34}; List<int> list2 = new List<int> {12,55}; List list1=新列表{12,55,55,34}; List list2=新列表{12,55}; 如果我将list1与list2相交,那么预期的结果是{12,55,55} 我怎样才能做到这一点?有没有其他方法可以达到同样的效果?试试
List<int> list1 = new List<int> {12,55,55,55,34};
List<int> list2 = new List<int> {12,55};
List list1=新列表{12,55,55,34};
List list2=新列表{12,55};
如果我将list1与list2相交,那么预期的结果是{12,55,55}
我怎样才能做到这一点?有没有其他方法可以达到同样的效果?试试以下方法:
List<int> result = list1.Where(i => list2.Contains(i)).ToList();
试试这个:
List<int> result = list1.Where(i => list2.Contains(i)).ToList();
或者,您可以使用方法组
var result=list1.Where(list2.Contains).ToList()
注意,如果列表非常大,最好将list2转换为哈希集
,然后在包含
调用中使用该哈希集
而不是list2列表上的O(N)
@Baldrick,但我没有选择过早的优化,因为我们正在讨论交集的核心概念。优化的结果将是O(n*m)
,其中n
是list1
的长度,m
是list2
@DavidHaney:这就是为什么我加上了你的答案,并将其作为注释添加。我觉得值得一提,以备将来参考@戴维达尼:很好!与“最快的手指优先”相比,这是一种更好的方法来构建一个体面的答案或者,您可以使用方法组var result=list1.Where(list2.Contains).ToList()
注意,如果列表非常大,最好将list2转换为哈希集
,然后在包含
调用中使用该哈希集
而不是list2列表上的O(N)
@Baldrick,但我没有选择过早的优化,因为我们正在讨论交集的核心概念。优化的结果将是O(n*m)
,其中n
是list1
的长度,m
是list2
@DavidHaney:这就是为什么我加上了你的答案,并将其作为注释添加。我觉得值得一提,以备将来参考@戴维达尼:很好!与“最快的手指优先”相比,这是一种更好的方法来构建一个体面的答案@GrantWinney通常在.NET中交集只包含/排除第一个集合中的元素,它不连接集合。@GrantWinney第一个列表包含我动态创建控件所基于的字段ID。字段ID 55表示我需要在从第二个列表中获取的唯一公共控件(字段ID 12)之间重复创建的空格(空白文本块)。由于第二个列表表示公共字段ID。@GrantWinney通常在.NET中,交集只包含/排除第一个集合中的元素,它不连接集合。@GrantWinney第一个列表包含我动态创建控件所基于的字段ID。字段ID 55表示我需要在从第二个列表中获取的唯一公共控件(字段ID 12)之间重复创建的空格(空白文本块)。因为第二个列表表示公共字段ID。