【发布时间】:2023-03-13 22:08:01
【问题描述】:
让我有 2 个数组 string[] A = { "a", "b", "c" } 和 string[] B = { "a", "b", "c", "d", "e" }。
有没有什么方法可以直接判断 A 是 B 的 子集?除了只会删除 B 的不同元素,但不会判断它是否完全是 B 的子集。
感谢您的帮助。
【问题讨论】:
让我有 2 个数组 string[] A = { "a", "b", "c" } 和 string[] B = { "a", "b", "c", "d", "e" }。
有没有什么方法可以直接判断 A 是 B 的 子集?除了只会删除 B 的不同元素,但不会判断它是否完全是 B 的子集。
感谢您的帮助。
【问题讨论】:
甚至还有一种方法可以达到这个目的。你可以使用HastSet<T>.IsSubsetOf:
var aSet = new HashSet<string>(A);
bool isASubsetOfB = aSet.IsSubsetOf(B);
【讨论】:
System.Linq 命名空间中的类中的方法。
Except 只是在幕后构建了一个哈希集。
这应该可以工作
bool isSubSet = !A.Except(B).Any();
【讨论】:
IsSubsetOf() 之类的扩展方法。
! 否则你检查它是否不是一个子集,所以不是它应该做的。
您可以结合 SequenceEquals 和 Intersect:
var isASubsetOfB = B.Intersect(A).SequenceEqual(A)
【讨论】:
你可以这样做,很简单:
A.All(B.Contains);
您可能想检查Length 以确保它们的大小不同并且A 是一个子集
bool isSubset = A.All(B.Contains) && A.Length < B.Length;
【讨论】: