C# 如何表示空集?

C# 如何表示空集?,c#,math,data-structures,set,set-theory,C#,Math,Data Structures,Set,Set Theory,从集合论: 集合A、B完全不相交,如果∩B={} 其中{}为空集 参考: 而且它说, 说不相交集A和B没有交集是不正确的;它们确实有一个交集,即空集,但这个交集没有元素 如果A和B不相交,则A∩B=B∩A={} 在C#中: 使用System.Linq; ... ... HashSet a=新的HashSet(new[]{“a”,“b”}); HashSet b=新的HashSet(new[]{“d”,“c”}); a、 相交(b)==b.相交(a);//=>假的 为什么? 如果=只是比较对象的

从集合论:

集合A、B完全不相交,如果∩B={}

其中{}为空集

参考:

而且它说,

说不相交集A和B没有交集是不正确的;它们确实有一个交集,即空集,但这个交集没有元素

如果A和B不相交,则
A∩B=B∩A={}

在C#中:

使用System.Linq;
...
...
HashSet a=新的HashSet(new[]{“a”,“b”});
HashSet b=新的HashSet(new[]{“d”,“c”});
a、 相交(b)==b.相交(a);//=>假的
为什么?


如果
=
只是比较对象的Id(相反;如果
a
b
;而不是
是C的
运算符),是否有方法表示实际的
空集

您的
相交
返回
IEnumerable
。因此,您正在比较IEnumerable的两个实例。正如注释中提到的L.B,您可以使用
Any
检查结果
IEnumerable
是否为空

bool empty = !a.Intersect(b).Any();
另一种方法是使用HashSet的
SetEquals
方法

var ab = new HashSet<string>(a.Intersect(b));

bool equal = ab.SetEquals(b.Intersect(a));
var ab=newhashset(a.Intersect(b));
bool equal=ab.SetEquals(b.Intersect(a));

您的
相交
返回
IEnumerable
。因此,您正在比较IEnumerable的两个实例。正如注释中提到的L.B,您可以使用
Any
检查结果
IEnumerable
是否为空

bool empty = !a.Intersect(b).Any();
另一种方法是使用HashSet的
SetEquals
方法

var ab = new HashSet<string>(a.Intersect(b));

bool equal = ab.SetEquals(b.Intersect(a));
var ab=newhashset(a.Intersect(b));
bool equal=ab.SetEquals(b.Intersect(a));

您的
相交
返回
IEnumerable
。因此,您正在比较IEnumerable的两个实例。正如注释中提到的L.B,您可以使用
Any
检查结果
IEnumerable
是否为空

bool empty = !a.Intersect(b).Any();
另一种方法是使用HashSet的
SetEquals
方法

var ab = new HashSet<string>(a.Intersect(b));

bool equal = ab.SetEquals(b.Intersect(a));
var ab=newhashset(a.Intersect(b));
bool equal=ab.SetEquals(b.Intersect(a));

您的
相交
返回
IEnumerable
。因此,您正在比较IEnumerable的两个实例。正如注释中提到的L.B,您可以使用
Any
检查结果
IEnumerable
是否为空

bool empty = !a.Intersect(b).Any();
另一种方法是使用HashSet的
SetEquals
方法

var ab = new HashSet<string>(a.Intersect(b));

bool equal = ab.SetEquals(b.Intersect(a));
var ab=newhashset(a.Intersect(b));
bool equal=ab.SetEquals(b.Intersect(a));

C#和大多数类似编程语言中的
=
运算符并不是数学中可以找到的等式。对于大多数数字,其行为与此类似,但即使如此也不总是正确的(在浮点舍入错误的情况下)。在比较对象时,情况大不相同。在您的例子中,它只是比较两个对象实例是否完全相同(请参见
object.ReferenceEquals
),显然它们并不相同。
newhashset()
表示一个空集,但如果您键入两次,它们将是两个不同的对象实例。如果愿意,您可以定义自己的自定义相等运算符(请参见运算符重载)。

C#和大多数类似编程语言中的
=
运算符不是您在数学中可以找到的那种相等运算符。对于大多数数字,其行为与此类似,但即使如此也不总是正确的(在浮点舍入错误的情况下)。在比较对象时,情况大不相同。在您的例子中,它只是比较两个对象实例是否完全相同(请参见
object.ReferenceEquals
),显然它们并不相同。
newhashset()
表示一个空集,但如果您键入两次,它们将是两个不同的对象实例。如果愿意,您可以定义自己的自定义相等运算符(请参见运算符重载)。

C#和大多数类似编程语言中的
=
运算符不是您在数学中可以找到的那种相等运算符。对于大多数数字,其行为与此类似,但即使如此也不总是正确的(在浮点舍入错误的情况下)。在比较对象时,情况大不相同。在您的例子中,它只是比较两个对象实例是否完全相同(请参见
object.ReferenceEquals
),显然它们并不相同。
newhashset()
表示一个空集,但如果您键入两次,它们将是两个不同的对象实例。如果愿意,您可以定义自己的自定义相等运算符(请参见运算符重载)。

C#和大多数类似编程语言中的
=
运算符不是您在数学中可以找到的那种相等运算符。对于大多数数字,其行为与此类似,但即使如此也不总是正确的(在浮点舍入错误的情况下)。在比较对象时,情况大不相同。在您的例子中,它只是比较两个对象实例是否完全相同(请参见
object.ReferenceEquals
),显然它们并不相同。
newhashset()
表示一个空集,但如果您键入两次,它们将是两个不同的对象实例。如果愿意,您可以定义自己的自定义相等运算符(请参见运算符重载)。

问题似乎不是如何表示空集(特别是任何其他集合),而是通常如何比较集合。还要注意,交集是可交换的,意思是
A∩B=B∩A
对于任意两组A,B.
bool empty=!a、 Intersect(b)Any()
@delnan,你说得对;
Interest()
方法应该返回一个没有元素的
HashSet()
实例。问题似乎不是如何表示空集(或任何其他集合),而是如何比较集合。还要注意,交集是可交换的,意思是
A∩B=B∩A
适用于任意两组A