问题标签 [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.
.net - 比较两个集合的相等性,而不考虑其中项目的顺序
我想比较两个集合(在 C# 中),但我不确定有效实现这一点的最佳方法。
我已经阅读了关于Enumerable.SequenceEqual的另一个线程,但这并不是我想要的。
就我而言,如果两个集合都包含相同的项目(无论顺序如何),它们将是相等的。
例子:
我通常做的是遍历一个集合的每个项目,看看它是否存在于另一个集合中,然后循环遍历另一个集合的每个项目,看看它是否存在于第一个集合中。(我首先比较长度)。
然而,这并不完全正确,而且它可能不是比较两个集合是否相等的最有效方法。
我能想到的一个错误的例子是:
这与我的实现相同。我应该只计算找到每个项目的次数并确保两个集合中的计数相等吗?
这些示例使用某种 C#(我们称其为伪 C#),但可以用任何您希望的语言给出答案,没关系。
注意:为了简单起见,我在示例中使用了整数,但我也希望能够使用引用类型的对象(它们不能正确地作为键,因为只比较对象的引用,而不是内容)。
c# - 比较引用类型的两个实例的“最佳实践”是什么?
我最近遇到了这个问题,到目前为止,我一直很高兴地覆盖相等运算符(==)和/或Equals方法,以查看两个引用类型是否实际上包含相同的数据(即看起来相同的两个不同实例)。
自从我更多地参与自动化测试(将参考/预期数据与返回的数据进行比较)以来,我一直在使用它。
在查看MSDN 中的一些编码标准指南时,我遇到了一篇反对它的文章。现在我明白这篇文章为什么这么说(因为它们不是同一个实例)但它没有回答这个问题:
- 比较两种引用类型的最佳方法是什么?
- 我们应该实现IComparable吗?(我还看到有人提到这应该只为值类型保留)。
- 有什么我不知道的接口吗?
- 我们应该自己动手吗?!
非常感谢^_^
更新
看起来我误读了一些文档(这是漫长的一天)并且覆盖Equals可能是要走的路..
如果您正在实现引用类型,如果您的类型看起来像 Point、String、BigNumber 等基本类型,则应考虑覆盖引用类型上的 Equals 方法。大多数引用类型不应重载相等运算符,即使它们覆盖 Equals也是如此。但是,如果您正在实现旨在具有值语义的引用类型,例如复数类型,则应覆盖相等运算符。
python - “==”和“is”有区别吗?
我的Google-fu让我失望了。
在 Python 中,以下两个相等性测试是否等效?
这是否适用于您将要比较实例的对象(list
比如说)?
好的,所以这种回答我的问题:
那么==
测试值在哪里is
测试以查看它们是否是同一个对象?
c - 您如何比较 C 中的结构是否相等?
您如何比较标准 C 中结构的两个实例是否相等?
objective-c - 覆盖 isEqual: 和 hash 的最佳实践
您如何isEqual:
在 Objective-C 中正确覆盖?“捕获”似乎是,如果两个对象相等(由isEqual:
方法确定),它们必须具有相同的哈希值。
Cocoa Fundamentals Guide的Introspection部分确实有一个关于如何覆盖的示例,复制如下,用于名为 的类:isEqual:
MyWidget
它检查指针相等,然后是类相等,最后使用 比较对象isEqualToWidget:
,它只检查name
anddata
属性。该示例未显示的是如何覆盖hash
.
让我们假设还有其他不影响相等性的属性,比如age
。不应该hash
重写该方法以便仅name
影响data
散列吗?如果是这样,你会怎么做?只需添加和的哈希name
值data
?例如:
这足够了吗?有没有更好的技术?如果你有原语怎么办,比如int
?将它们转换NSNumber
为获取它们的哈希?或类似的结构NSRect
?
(Brain fart:最初将它们与|=
. 一起写为“按位或”。意思是添加。)
java - 如何避免,那个 URL.equals 需要在 Java 中访问互联网?
equals()
Java 类库中 URL 类的方法发出 DNS 请求以获取主机名的 IP,以检查两个 IP 是否相等。即使是从相同的String
. 有没有办法避免这种互联网访问?
c# - 找出是否有两个 ICollection 的最快方法集合包含相同的对象
找出两个ICollection<T>
集合是否包含完全相同的条目的最快方法是什么?蛮力很清楚,我想知道是否有更优雅的方法。
我们使用的是 C# 2.0,所以请尽可能不要扩展方法!
编辑:对于有序和无序的集合,答案都会很有趣,并且希望每个集合都不同。
javascript - 在 JavaScript 比较中应该使用哪个等号运算符(== vs ===)?
我正在使用JSLint来浏览 JavaScript,并且在执行诸如比较语句内部之类的操作时,它会返回许多建议以将==
(两个等号)替换为(三个等号)。===
idSele_UNVEHtype.value.length == 0
if
==
替换为 有性能优势===
吗?
由于存在许多比较运算符,因此欢迎任何性能改进。
如果不进行类型转换,是否会提高性能==
?
language-agnostic - 投票:当传递的对象与 LHS 类型不匹配时,相等的正确行为?
我问了一个关于 findbugs 的相关问题,但让我们问一个更一般的问题。
假设我正在使用一种可以实现多态的面向对象语言。
假设语言支持静态类型检查(例如,Java、C++)
假设该语言不允许参数变化(例如,Java,再次......)
如果我要重写将 Object 作为参数的相等操作,在参数与调用 equals 的 LHS 不同的类型或子类型的情况下,我应该怎么做?
选项 1 - 返回 false,因为对象显然不等于
选项 2 - 抛出一个转换异常,因为如果语言实际上支持方差(这本来是可取的),这将在编译时作为错误被捕获;因此,在运行时检测此错误是有意义的,因为发送另一种类型的情况应该是非法的。
c# - System.Collections.Generic.Dictionary 是什么.Equals实际上是做什么的?
我今天在对通用字典进行单元测试时遇到了这个问题。
失败,除非actual == expected
(对象引用相同)。显然,actual.Equals(expected)
也返回 false。
很好,但是如果System.Collections.Generic.Dictionary<int, string>.Equals
只执行引用相等,那有什么意义IEquatable
呢?换句话说,为什么没有内置的方法来为泛型集合做值相等?
编辑感谢到目前为止的回复。显然我的例子是使用值类型,但我认为我的抱怨适用于所有对象。为什么泛型集合相等不能只是其类型相等的并集?意外的行为并没有真正削减它,因为有单独的规定来寻找参考平等。IEquatable
正如 Konrad Rudolph 指出的那样,我想这将引入集合的约束,即仅持有实现的对象。但是,在像 Dictionary 这样的对象中,这似乎并不过分要求。