问题标签 [equality]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
20 回答
108380 浏览

.net - 比较两个集合的相等性,而不考虑其中项目的顺序

我想比较两个集合(在 C# 中),但我不确定有效实现这一点的最佳方法。

我已经阅读了关于Enumerable.SequenceEqual的另一个线程,但这并不是我想要的。

就我而言,如果两个集合都包含相同的项目(无论顺序如何),它们将是相等的。

例子:

我通常做的是遍历一个集合的每个项目,看看它是否存在于另一个集合中,然后循环遍历另一个集合的每个项目,看看它是否存在于第一个集合中。(我首先比较长度)。

然而,这并不完全正确,而且它可能不是比较两个集合是否相等的最有效方法。

我能想到的一个错误的例子是:

这与我的实现相同。我应该只计算找到每个项目的次数并确保两个集合中的计数相等吗?


这些示例使用某种 C#(我们称其为伪 C#),但可以用任何您希望的语言给出答案,没关系。

注意:为了简单起见,我在示例中使用了整数,但我也希望能够使用引用类型的对象(它们不能正确地作为键,因为只比较对象的引用,而不是内容)。

0 投票
9 回答
31038 浏览

c# - 比较引用类型的两个实例的“最佳实践”是什么?

我最近遇到了这个问题,到目前为止,我一直很高兴地覆盖相等运算符(==)和/或Equals方法,以查看两个引用类型是否实际上包含相同的数据(即看起来相同的两个不同实例)。

自从我更多地参与自动化测试(将参考/预期数据与返回的数据进行比较)以来,我一直在使用它。

在查看MSDN 中的一些编码标准指南时,我遇到了一篇反对它的文章。现在我明白这篇文章为什么这么说(因为它们不是同一个实例)但它没有回答这个问题:

  1. 比较两种引用类型的最佳方法是什么?
  2. 我们应该实现IComparable吗?(我还看到有人提到这应该只为值类型保留)。
  3. 有什么我不知道的接口吗?
  4. 我们应该自己动手吗?!

非常感谢^_^

更新

看起来我误读了一些文档(这是漫长的一天)并且覆盖Equals可能是要走的路..

如果您正在实现引用类型,如果您的类型看起来像 Point、String、BigNumber 等基本类型,则应考虑覆盖引用类型上的 Equals 方法。大多数引用类型不应重载相等运算符,即使它们覆盖 Equals也是如此。但是,如果您正在实现旨在具有值语义的引用类型,例如复数类型,则应覆盖相等运算符。

0 投票
14 回答
448262 浏览

python - “==”和“is”有区别吗?

我的Google-fu让我失望了。

在 Python 中,以下两个相等性测试是否等效?

这是否适用于您将要比较实例的对象(list比如说)?

好的,所以这种回答我的问题:

那么==测试值在哪里is测试以查看它们是否是同一个对象?

0 投票
11 回答
219836 浏览

c - 您如何比较 C 中的结构是否相等?

您如何比较标准 C 中结构的两个实例是否相等?

0 投票
16 回答
93351 浏览

objective-c - 覆盖 isEqual: 和 hash 的最佳实践

您如何isEqual:在 Objective-C 中正确覆盖?“捕获”似乎是,如果两个对象相等(由isEqual:方法确定),它们必须具有相同的哈希值。

Cocoa Fundamentals GuideIntrospection部分确实有一个关于如何覆盖的示例,复制如下,用于名为 的类:isEqual:MyWidget

它检查指针相等,然后是类相等,最后使用 比较对象isEqualToWidget:,它只检查nameanddata属性。该示例显示的是如何覆盖hash.

让我们假设还有其他不影响相等性的属性,比如age。不应该hash重写该方法以便仅name影响data散列吗?如果是这样,你会怎么做?只需添加和的哈希namedata?例如:

这足够了吗?有没有更好的技术?如果你有原语怎么办,比如int?将它们转换NSNumber为获取它们的哈希?或类似的结构NSRect

Brain fart:最初将它们与|=. 一起写为“按位或”。意思是添加。)

0 投票
3 回答
2273 浏览

java - 如何避免,那个 URL.equals 需要在 Java 中访问互联网?

equals()Java 类库中 URL 类的方法发出 DNS 请求以获取主机名的 IP,以检查两个 IP 是否相等。即使是从相同的String. 有没有办法避免这种互联网访问?

0 投票
7 回答
2099 浏览

c# - 找出是否有两个 ICollection 的最快方法集合包含相同的对象

找出两个ICollection<T>集合是否包含完全相同的条目的最快方法是什么?蛮力很清楚,我想知道是否有更优雅的方法。

我们使用的是 C# 2.0,所以请尽可能不要扩展方法!

编辑:对于有序和无序的集合,答案都会很有趣,并且希望每个集合都不同。

0 投票
48 回答
1983441 浏览

javascript - 在 JavaScript 比较中应该使用哪个等号运算符(== vs ===)?

我正在使用JSLint来浏览 JavaScript,并且在执行诸如比较语句内部之类的操作时,它会返回许多建议以将==(两个等号)替换为(三个等号)。===idSele_UNVEHtype.value.length == 0if

==替换为 有性能优势===吗?

由于存在许多比较运算符,因此欢迎任何性能改进。

如果不进行类型转换,是否会提高性能==

0 投票
5 回答
124 浏览

language-agnostic - 投票:当传递的对象与 LHS 类型不匹配时,相等的正确行为?

我问了一个关于 findbugs 的相关问题,但让我们问一个更一般的问题。

假设我正在使用一种可以实现多态的面向对象语言。

假设语言支持静态类型检查(例如,Java、C++)

假设该语言不允许参数变化(例如,Java,再次......)

如果我要重写将 Object 作为参数的相等操作,在参数与调用 equals 的 LHS 不同的类型或子类型的情况下,我应该怎么做?

选项 1 - 返回 false,因为对象显然不等于

选项 2 - 抛出一个转换异常,因为如果语言实际上支持方差(这本来是可取的),这将在编译时作为错误被捕获;因此,在运行时检测此错误是有意义的,因为发送另一种类型的情况应该是非法的。

0 投票
3 回答
2548 浏览

c# - System.Collections.Generic.Dictionary 是什么.Equals实际上是做什么的?

我今天在对通用字典进行单元测试时遇到了这个问题。

失败,除非actual == expected(对象引用相同)。显然,actual.Equals(expected)也返回 false。

很好,但是如果System.Collections.Generic.Dictionary<int, string>.Equals只执行引用相等,那有什么意义IEquatable呢?换句话说,为什么没有内置的方法来为泛型集合做值相等?

编辑感谢到目前为止的回复。显然我的例子是使用值类型,但我认为我的抱怨适用于所有对象。为什么泛型集合相等不能只是其类型相等的并集?意外的行为并没有真正削减它,因为有单独的规定来寻找参考平等。IEquatable正如 Konrad Rudolph 指出的那样,我想这将引入集合的约束,即仅持有实现的对象。但是,在像 Dictionary 这样的对象中,这似乎并不过分要求。