如何检查一个集合是否只包含来自另一个集合的元素?

时间:2016-04-13 06:54:39

标签: c# .net

我试图查看我的源集合是否包含只能来自第二个集合的值。

例如。

Valid data collection: 1, 2, 5 

Source Collection | Result
-----------------------------------------
<empty>           | true
1                 | true
1, 2              | true
1, 2, 5           | true
1, 5              | true
3                 | false (3 is illegal)
1, 3              | false (3 is illegal)
1, 2, 555         | false (555 is illegal)

所以它就像..如果我的源集合有一些值..那么只有当它们包含在其他集合中时,这些值才会存在。

Urgh。很难解释:(

3 个答案:

答案 0 :(得分:7)

这样的东西
var allInCollection = src.All(x => valid.Contains(x));

或者如果您更喜欢基于循环的方法:

bool result = true;
foreach(var e in src) 
{
    if (!valid.Contains(e)) result = false;
}

答案 1 :(得分:4)

您可以使用LINQ Except检查集合中的任何元素是否在其他集合中。

例如:

var a = new List<int>() {1,2,5};
var b = new List<int>() {1,3};
var c = b.Except(a);
if (c.Any()){ //then it is wrong, some items of b is not in a
}

答案 2 :(得分:1)

这应该这样做:

sourceCollection.All(num => validDataCollection.Contains(num))