我需要检查两个列表是否有任何共同的元素。 我只需要一个是/否 - 我不需要实际的常用元素列表。
我可以使用Enumerable.Intersect()
但这实际上会返回匹配项的集合,这似乎需要额外的开销。 有没有更好的方法来检查列表是否不相交?
我的列表实际上恰好是List<T>
,但这并不重要,如果更方便,我可以使用像HashSet
这样的东西。即,我不想不必要地限制潜在的解决方案。
Grazie mille
答案 0 :(得分:1)
最简单的版本(使用Intersect):
void matrix_x_vector_new(int n1,
int n2,
int vector[3],
int matrix[2][3],
int result_vector[3])
{
int i, j; // i = row; j = column;
printf("\nProduct Matrix of [x]*[y]\n");
// Load up A[n][n]
for (i = 0; i<n2; i++)
{
for (j = 0; j<n1; j++)
{
result_vector[j] += matrix[j][i] * vector[i];
printf("%4i", result_vector[j]);
}
printf("\n");
}
printf("Vector: \n");
// Print Vector from Product[n][n]
for (i = 0; i<n1; i++)
{
printf("%4i\n", result_vector[i]);
}
}
只有警告 public bool Compare(List<T> firstCollection, List<T> secondCollection)
{
return firstCollection.Intersect(secondCollection).Any();
}
才能在T
电话中实施IEquatable<T>
或传递自定义IEqualityComparer<T>
。另外,请确保Intersect
与GetHashCode
修改1:
使用Dictionary的这个版本不仅提供Equals
比较,还提供元素。在此解决方案中,boolean
最后将包含与交叉元素数量相关的数据,其中一个集合中的元素数量,而不是另一个集合中的元素数量,因此相当持久。此解决方案还具有Dictionary
要求
IEquatable<T>