Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个列表相交<;int>;有重复价值的_C# - Fatal编程技术网

C# 两个列表相交<;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} 我怎样才能做到这一点?有没有其他方法可以达到同样的效果?试试

我有两个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> 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转换为
哈希集
,然后在
包含
调用中使用该
哈希集
而不是list2Contains是O(1),而不是
列表上的O(N)
@Baldrick,但我没有选择过早的优化,因为我们正在讨论交集的核心概念。优化的结果将是
O(n*m)
,其中
n
list1
的长度,
m
list2
@DavidHaney:这就是为什么我加上了你的答案,并将其作为注释添加。我觉得值得一提,以备将来参考@戴维达尼:很好!与“最快的手指优先”相比,这是一种更好的方法来构建一个体面的答案或者,您可以使用方法组
var result=list1.Where(list2.Contains).ToList()
注意,如果列表非常大,最好将list2转换为
哈希集
,然后在
包含
调用中使用该
哈希集
而不是list2Contains是O(1),而不是
列表上的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。