HashSet<T>.SetEquals(IEnumerable<T>) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
确定 HashSet<T> 对象和指定的集合是否包含相同的元素。
public:
virtual bool SetEquals(System::Collections::Generic::IEnumerable<T> ^ other);
public:
bool SetEquals(System::Collections::Generic::IEnumerable<T> ^ other);
public bool SetEquals (System.Collections.Generic.IEnumerable<T> other);
[System.Security.SecurityCritical]
public bool SetEquals (System.Collections.Generic.IEnumerable<T> other);
abstract member SetEquals : seq<'T> -> bool
override this.SetEquals : seq<'T> -> bool
[<System.Security.SecurityCritical>]
member this.SetEquals : seq<'T> -> bool
[<System.Security.SecurityCritical>]
abstract member SetEquals : seq<'T> -> bool
override this.SetEquals : seq<'T> -> bool
Public Function SetEquals (other As IEnumerable(Of T)) As Boolean
参数
- other
- IEnumerable<T>
要与当前 HashSet<T> 对象进行比较的集合。
返回
如果 HashSet<T> 对象等于 other
,则 true
;否则,false
。
实现
- 属性
例外
other
null
。
示例
以下示例创建两个不同的 HashSet<T> 对象,并将其与彼此进行比较。 最初,这两个集不相等,使用 SetEquals 方法演示。 然后修改 allNumbers
HashSet<T> 对象,之后集相等。
HashSet<int> lowNumbers = new HashSet<int>();
HashSet<int> allNumbers = new HashSet<int>();
for (int i = 1; i < 5; i++)
{
lowNumbers.Add(i);
}
for (int i = 0; i < 10; i++)
{
allNumbers.Add(i);
}
Console.Write("lowNumbers contains {0} elements: ", lowNumbers.Count);
DisplaySet(lowNumbers);
Console.Write("allNumbers contains {0} elements: ", allNumbers.Count);
DisplaySet(allNumbers);
Console.WriteLine("lowNumbers overlaps allNumbers: {0}",
lowNumbers.Overlaps(allNumbers));
Console.WriteLine("allNumbers and lowNumbers are equal sets: {0}",
allNumbers.SetEquals(lowNumbers));
// Show the results of sub/superset testing
Console.WriteLine("lowNumbers is a subset of allNumbers: {0}",
lowNumbers.IsSubsetOf(allNumbers));
Console.WriteLine("allNumbers is a superset of lowNumbers: {0}",
allNumbers.IsSupersetOf(lowNumbers));
Console.WriteLine("lowNumbers is a proper subset of allNumbers: {0}",
lowNumbers.IsProperSubsetOf(allNumbers));
Console.WriteLine("allNumbers is a proper superset of lowNumbers: {0}",
allNumbers.IsProperSupersetOf(lowNumbers));
// Modify allNumbers to remove numbers that are not in lowNumbers.
allNumbers.IntersectWith(lowNumbers);
Console.Write("allNumbers contains {0} elements: ", allNumbers.Count);
DisplaySet(allNumbers);
Console.WriteLine("allNumbers and lowNumbers are equal sets: {0}",
allNumbers.SetEquals(lowNumbers));
// Show the results of sub/superset testing with the modified set.
Console.WriteLine("lowNumbers is a subset of allNumbers: {0}",
lowNumbers.IsSubsetOf(allNumbers));
Console.WriteLine("allNumbers is a superset of lowNumbers: {0}",
allNumbers.IsSupersetOf(lowNumbers));
Console.WriteLine("lowNumbers is a proper subset of allNumbers: {0}",
lowNumbers.IsProperSubsetOf(allNumbers));
Console.WriteLine("allNumbers is a proper superset of lowNumbers: {0}",
allNumbers.IsProperSupersetOf(lowNumbers));
void DisplaySet(HashSet<int> set)
{
Console.Write("{");
foreach (int i in set)
{
Console.Write(" {0}", i);
}
Console.WriteLine(" }");
}
/* This code example produces output similar to the following:
* lowNumbers contains 4 elements: { 1 2 3 4 }
* allNumbers contains 10 elements: { 0 1 2 3 4 5 6 7 8 9 }
* lowNumbers overlaps allNumbers: True
* allNumbers and lowNumbers are equal sets: False
* lowNumbers is a subset of allNumbers: True
* allNumbers is a superset of lowNumbers: True
* lowNumbers is a proper subset of allNumbers: True
* allNumbers is a proper superset of lowNumbers: True
* allNumbers contains 4 elements: { 1 2 3 4 }
* allNumbers and lowNumbers are equal sets: True
* lowNumbers is a subset of allNumbers: True
* allNumbers is a superset of lowNumbers: True
* lowNumbers is a proper subset of allNumbers: False
* allNumbers is a proper superset of lowNumbers: False
*/
let displaySet (set: HashSet<int>) =
printf "{"
for i in set do
printf $" {i}"
printfn " }"
let lowNumbers = HashSet<int>()
let allNumbers = HashSet<int>()
for i = 1 to 4 do
lowNumbers.Add i |> ignore
for i = 0 to 9 do
allNumbers.Add i |> ignore
printf $"lowNumbers contains {lowNumbers.Count} elements: "
displaySet lowNumbers
printf $"allNumbers contains {allNumbers.Count} elements: "
displaySet allNumbers
printfn $"lowNumbers overlaps allNumbers: {lowNumbers.Overlaps allNumbers}"
printfn $"allNumbers and lowNumbers are equal sets: {allNumbers.SetEquals lowNumbers}"
// Show the results of sub/superset testing
printfn $"lowNumbers is a subset of allNumbers: {lowNumbers.IsSubsetOf allNumbers}"
printfn $"allNumbers is a superset of lowNumbers: {allNumbers.IsSupersetOf lowNumbers}"
printfn $"lowNumbers is a proper subset of allNumbers: {lowNumbers.IsProperSubsetOf allNumbers}"
printfn $"allNumbers is a proper superset of lowNumbers: {allNumbers.IsProperSupersetOf lowNumbers}"
// Modify allNumbers to remove numbers that are not in lowNumbers.
allNumbers.IntersectWith lowNumbers
printf $"allNumbers contains {allNumbers.Count} elements: "
displaySet allNumbers
printfn $"allNumbers and lowNumbers are equal sets: {allNumbers.SetEquals lowNumbers}"
// Show the results of sub/superset testing with the modified set.
printfn $"lowNumbers is a subset of allNumbers: {lowNumbers.IsSubsetOf allNumbers}"
printfn $"allNumbers is a superset of lowNumbers: {allNumbers.IsSupersetOf lowNumbers}"
printfn $"lowNumbers is a proper subset of allNumbers: {lowNumbers.IsProperSubsetOf allNumbers}"
printfn $"allNumbers is a proper superset of lowNumbers: {allNumbers.IsProperSupersetOf lowNumbers}"
// This code example produces output similar to the following:
// lowNumbers contains 4 elements: { 1 2 3 4 }
// allNumbers contains 10 elements: { 0 1 2 3 4 5 6 7 8 9 }
// lowNumbers overlaps allNumbers: True
// allNumbers and lowNumbers are equal sets: False
// lowNumbers is a subset of allNumbers: True
// allNumbers is a superset of lowNumbers: True
// lowNumbers is a proper subset of allNumbers: True
// allNumbers is a proper superset of lowNumbers: True
// allNumbers contains 4 elements: { 1 2 3 4 }
// allNumbers and lowNumbers are equal sets: True
// lowNumbers is a subset of allNumbers: True
// allNumbers is a superset of lowNumbers: True
// lowNumbers is a proper subset of allNumbers: False
// allNumbers is a proper superset of lowNumbers: False
Shared Sub Main()
Dim lowNumbers As HashSet(Of Integer) = New HashSet(Of Integer)()
Dim allNumbers As HashSet(Of Integer) = New HashSet(Of Integer)()
For i As Integer = 1 To 4
lowNumbers.Add(i)
Next i
For i As Integer = 0 To 9
allNumbers.Add(i)
Next i
Console.Write("lowNumbers contains {0} elements: ", lowNumbers.Count)
DisplaySet(lowNumbers)
Console.Write("allNumbers contains {0} elements: ", allNumbers.Count)
DisplaySet(allNumbers)
Console.WriteLine("lowNumbers overlaps allNumbers: {0}", _
lowNumbers.Overlaps(allNumbers))
Console.WriteLine("allNumbers and lowNumbers are equal sets: {0}", _
allNumbers.SetEquals(lowNumbers))
' Show the results of sub/superset testing
Console.WriteLine("lowNumbers is a subset of allNumbers: {0}", _
lowNumbers.IsSubsetOf(allNumbers))
Console.WriteLine("allNumbers is a superset of lowNumbers: {0}", _
allNumbers.IsSupersetOf(lowNumbers))
Console.WriteLine("lowNumbers is a proper subset of allNumbers: {0}", _
lowNumbers.IsProperSubsetOf(allNumbers))
Console.WriteLine("allNumbers is a proper superset of lowNumbers: {0}", _
allNumbers.IsProperSupersetOf(lowNumbers))
' Modify allNumbers to remove numbers that are not in lowNumbers.
allNumbers.IntersectWith(lowNumbers)
Console.Write("allNumbers contains {0} elements: ", allNumbers.Count)
DisplaySet(allNumbers)
Console.WriteLine("allNumbers and lowNumbers are equal sets: {0}", _
allNumbers.SetEquals(lowNumbers))
' Show the results of sub/superset testing with the modified set.
Console.WriteLine("lowNumbers is a subset of allNumbers: {0}", _
lowNumbers.IsSubsetOf(allNumbers))
Console.WriteLine("allNumbers is a superset of lowNumbers: {0}", _
allNumbers.IsSupersetOf(lowNumbers))
Console.WriteLine("lowNumbers is a proper subset of allNumbers: {0}", _
lowNumbers.IsProperSubsetOf(allNumbers))
Console.WriteLine("allNumbers is a proper superset of lowNumbers: {0}", _
allNumbers.IsProperSupersetOf(lowNumbers))
End Sub
' This code example produces output similar to the following:
' lowNumbers contains 4 elements: { 1 2 3 4 }
' allNumbers contains 10 elements: { 0 1 2 3 4 5 6 7 8 9 }
' lowNumbers overlaps allNumbers: True
' allNumbers and lowNumbers are equal sets: False
' lowNumbers is a subset of allNumbers: True
' allNumbers is a superset of lowNumbers: True
' lowNumbers is a proper subset of allNumbers: True
' allNumbers is a proper superset of lowNumbers: True
' allNumbers contains 4 elements: { 1 2 3 4 }
' allNumbers and lowNumbers are equal sets: True
' lowNumbers is a subset of allNumbers: True
' allNumbers is a superset of lowNumbers: True
' lowNumbers is a proper subset of allNumbers: False
' allNumbers is a proper superset of lowNumbers: False
注解
SetEquals 方法忽略 other
参数中元素的重复项和顺序。
如果由 other
表示的集合是一个与当前 HashSet<T> 对象相同的相等比较器 HashSet<T> 集合,则此方法是 O(n
) 操作。 否则,此方法是 O(n
+ m
) 操作,其中 n
是 other
中的元素数,m
Count。