是否可以知道或检查List1中的所有元素是否属于List2的一部分? 例如,如果我有
List1 = { 1,2,3,4 }
List2 = { 1,2,3,5,6,4 }
如果List 1中的所有元素都在List 2中,我想得到True,否则为
注意:没有ForLoop
列表可以是整数列表,字符串,...等
答案 0 :(得分:17)
using System.Linq;
bool allInList2 = !List1.Except(List2).Any();
答案 1 :(得分:8)
您可以使用Intersect
方法。
然后,如果结果与List1
的长度相同,则表示其所有元素都包含在List2
中。
答案 2 :(得分:6)
您可以使用HashSet.IsProperSubsetOf(或IsProperSupersetOf)方法,如下所示:
var hashset1 = new HashSet<int>(list1);
if (hashset1.IsProperSubsetOf(list2)) ...
答案 3 :(得分:5)
此代码示例
- 检查 b 中 中是否存在 中的任何元素
- 然后反转结果。
using System.Linq;
....
public static bool ContainsAllItems(List<T> a, List<T> b)
{
return !b.Except(a).Any();
}
最初找到解决方案here。
答案 4 :(得分:3)
答案 5 :(得分:3)
List<int> list1 = new List<int>() { 1, 2, 3, 4 };
List<int> list2 = new List<int>() { 1, 2, 3, 5, 6, 4 };
list1.All(x => list2.Contains(x));
答案 6 :(得分:2)
创建这些列表的intersection并仅查询该交集结果列表 当然,内部有一个循环(并且必须是ob任何给定的解决方案)
HTH
答案 7 :(得分:0)
bool value = !(l1.Any(item => !l2.Contains(item)));
答案 8 :(得分:0)
扩展方法,长版本:
public static IsSubetOf (this IEnumerable coll1, IEnumerable coll2)
{
foreach (var elem in coll1)
{
if (!coll2.Contains (elem))
{
return false;
}
}
return true;
}
简短版本:
public static IsSubetOf (this IEnumerable<T> coll1, IEnumerable<T> coll2)
{
return !coll1.Any (x => !coll2.Contains (x));
}