两个集合如下所示:
string[] bigArr = new string[] { "a", "b", "c" };
string[] smallArr = new string[] { "a", "b"};
//在大集合的基础上,根据小集合获取大集合的差集
var exceptArr = bigArr.Except(smallArr);
//判断是否是子集
if(exceptArr.Any())
{
Console.WriteLine("samllArr 是 bigArr的一个子集");
}
else
{
Console.WriteLine("samllArr 不是 bigArr的一个子集");
}
但是这种Except的方法,其实以上的方法是按照元素个数找的,只要smallAll中元素的个数小于bigAll中元素的个数exceptArr.Any()就返回true,例如string[] bigArr = new string[] { "a", "b", "c" };
string[] smallArr = new string[] { "d"};
这种情况下,exceptArr.Any()也会返回true,但这并不是我们想要的结果。那如果想要判断smalAll是否包含在bigAll中,该怎么做呢?方法如下:
if(smallArr.All(t => bigArr.Any(b => b==t)))
{
Console.WriteLine("samllArr 是 bigArr的一个子集或一样");
}
else
{
Console.WriteLine("samllArr 不是 bigArr的一个子集或一样");
}
这样就可以正确判断smallAll是否包含在bigAll中。
除此之外,C#中集合运算,例如:
int[] oldArray = { 1, 2, 3, 4, 5 }; int[] newArray = { 2, 4, 5, 7, 8, 9 }; var jiaoJi = oldArray.Intersect(newArray).ToList();//2,4,5 var oldChaJi = oldArray.Except(newArray).ToList();//1,3 oldArray中有的,但是newArray中没有的 var newChaJi = newArray.Except(oldArray).ToList();//7,8,9 var bingJi = oldArray.Union(newArray).ToList();//1,2,3,4,5,7,8,9