问题标签 [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 投票
9 回答
6049 浏览

c# - 无论条目的顺序如何,如何使两个数组的元素相等

我正在尝试计算两个数组,例如myArray{a,b,c}urArray{a,b,c,c}

我想检查两个元素是否具有相同的元素,例如在上述条件下,第二个数组urArray有一个额外的 'c' 。

如果两组数组是否具有相同的元素并且元素的顺序无关紧要,代码应该能够等同于它们。只是两个数组应该有相同的元素,即如果一个有两个'c',另一个也应该有两个'c',否则条件为假。

所以我所做的是:

但不知道如何表明数组是否具有相同的元素......

我怎样才能做到这一点?

0 投票
2 回答
994 浏览

c++ - 这个简单的指针相等性测试怎么会失败?

_openFiles 是 FileManager 的私有成员,只是 File * 的数组。
当在立即窗口中执行完全相同的测试时,我得到的结果为 1!?!

编辑== true 纯粹是作为健全性检查添加的!

0 投票
3 回答
4813 浏览

c# - 我想在 2 字节数组之间有一个扩展方法“Equals”

我正在做一些 byte[] 比较。

我试过 == 但这就像基本的 Equals 一样,它:

我试图添加一个扩展方法,但是由于重载的基类的 Equals 采用相同的参数,它转到基方法而不是扩展,无论如何我可以使用 Equals 扩展(不更改它的名称......)或者(甚至更好)使用 == 运算符?

这是我实际上必须比较的:

0 投票
21 回答
176547 浏览

java - 在 Java 中使用 == 比较浮点数有什么问题?

根据这个 java.sun 页面 ==是 Java 中浮点数的相等比较运算符。

但是,当我键入此代码时:

进入我的编辑器并运行静态分析,我得到:“JAVA0078 浮点值与 == 相比

使用==比较浮点值有什么问题?正确的方法是什么? 

0 投票
10 回答
20647 浏览

java - 当 "" == s 为假但 "".equals(s) 为真时

编辑 感谢您的及时回复。请看看真正的问题是什么。这次我把它变得大胆了。

我确实理解 == 和 .equals 之间的区别。所以,这不是我的问题(我实际上为此添加了一些上下文)


我正在对空字符串执行以下验证:

过去数据库中获取值或从另一个节点反序列化对象时,此测试失败,因为两个字符串实例确实是不同的对象引用,尽管它们包含相同的数据。

所以解决这些情况的方法是

我很好。这很清楚。

今天再次发生这种情况,但让我感到困惑,因为这次应用程序是一个非常小的独立应用程序,根本不使用网络,所以没有从数据库中获取新字符串,也没有从另一个节点反序列化。

所以问题是:


其他情况下:

对于本地独立应用程序?

我很确定代码中没有使用new String() 。

字符串引用可能是“”的唯一方法是因为它是直接在代码中分配的“”(或者这就是我的想法),例如:

不知何故(在阅读了更多代码之后,我有了一个线索)创建了两个不同的空字符串对象引用,我想知道如何

jjnguys 回答中的更多内容:

字节!

编辑:结论

我找到了原因。

在 jjnguy 建议之后,我能够以不同的眼光看待代码。

有罪的方法:StringBuilder.toString()

分配并初始化一个新的 String 对象以包含该对象当前表示的字符序列。

嗬!...

谜团已揭开。

该代码使用 StringBuilder 来处理不断增长的字符串。事实证明,在某些时候有人这样做了:

并使用

ps 我最近是不是看太多 CodingHorror 了?或者为什么我觉得有必要在这里添加一些有趣的动物图片?

0 投票
3 回答
16821 浏览

objective-c - 实现 -hash / -isEqual: / -isEqualTo...: 用于 Objective-C 集合

注意:以下 SO 问题是相关的,但它们和链接的资源似乎都没有完全回答我的问题,特别是与实现对象集合的相等测试有关。


背景

NSObject 提供(返回实例的地址,如)和(除非接收者的地址和参数的地址相同,否则返回)的默认实现。这些方法被设计为在必要时被覆盖,但文档清楚地表明您应该提供两者或都不提供。此外,如果返回两个对象,则这些对象的结果必须相同。如果不是,那么当应该相同的对象(例如返回的两个字符串实例)被添加到 Cocoa 集合或直接比较时,就会出现问题。-hash(NSUInteger)self-isEqual:NO-isEqual:YES-hash-compare:NSOrderedSame

语境

我开发了 CHDataStructures.framework,这是一个 Objective-C 数据结构的开源库。我已经实现了许多集合,目前正在改进和增强它们的功能。我想添加的功能之一是能够将集合与另一个集合进行比较。

这些比较应该考虑两个集合中存在的对象(包括排序,如果适用),而不是只比较内存地址。这种方式在Cocoa中有相当的先例,一般采用单独的方式,包括以下几种:

我想让我的自定义集合对相等性测试具有鲁棒性,因此它们可以安全地(并且可预测地)添加到其他集合中,并允许其他集合(如 NSSet)确定两个集合是否相等/等价/重复。

问题

一个-isEqualTo...:方法本身就可以很好地工作,但是如果参数与接收者属于同一类(或者可能是子类),或者其他情况下,定义这些方法的类通常也会覆盖-isEqual:以调用。这意味着该类还必须定义为,它将为具有相同内容的不同实例返回相同的值。[self isEqualTo...:][super isEqual:]-hash

此外,Apple 的文档-hash规定如下:(强调我的)

“如果将可变对象添加到使用哈希值确定对象在集合中的位置的集合中,则该对象的哈希方法返回的值在对象在集合中时不得更改。因此,无论是哈希方法不得依赖任何对象的内部状态信息,或者您必须确保对象在集合中时对象的内部状态信息不会改变。因此,例如,可以将可变字典放入哈希表中,但您必须当它在那里时不要更改它。(请注意,很难知道给定对象是否在集合中。)“

编辑: 我完全理解为什么这是必要的,并且完全同意这个推理——我在这里提到它是为了提供额外的背景,并为了简洁而避开了为什么会这样的话题。

我所有的集合都是可变的,并且哈希必须至少考虑一些内容,所以这里唯一的选择是认为改变存储在另一个集合中的集合是一个编程错误。(我的收藏都采用了NSCopying,所以像 NSDictionary 这样的收藏可以成功地制作副本作为密钥等)

-isEqual:实现and对我来说是有意义的-hash,因为(例如)我的一个类的间接用户可能不知道-isEqualTo...:要调用的具体方法,甚至不关心两个对象是否是同一个类的实例。他们应该能够调用-isEqual:或调用-hash任何类型的变量id并获得预期的结果。

-isEqual:(可以访问被比较的两个实例)不同,-hash必须“盲目地”返回结果,只能访问特定实例中的数据。由于它无法知道哈希的用途,因此对于所有应该被视为相等/相同的可能实例,结果必须一致,并且必须始终与-isEqual:. (编辑:这已经被下面的答案揭穿了,它确实让生活更轻松。)此外,编写好的散列函数并非易事——保证唯一性是一个挑战,尤其是当你只有一个 NSUInteger(32/64 位)时在其中代表它。

问题

  1. 为集合实施相等比较 时是否有最佳实践?-hash
  2. 在 Objective-C 和 Cocoa 风格的集合中是否有任何特殊需要计划?
  3. -hash是否有任何具有合理置信度的单元测试的好方法?
  4. 关于实施-hash以同意-isEqual:包含任意类型元素的集合的任何建议?我应该知道哪些陷阱?(编辑:不像我最初想的那样有问题——正如@kperryua指出的那样,“相等的-hash并不意味着-isEqual:”。)

编辑: 我应该澄清一下,我对如何实现 -isEqual: 或 -isEqualTo...: 对于集合并不感到困惑,这很简单。我认为我的困惑主要源于(错误地)认为如果 -isEqual: 返回 NO,则 -hash 必须返回不同的值。过去做过密码学,我认为不同值的散列必须不同。然而,下面的答案让我意识到一个“好的”散列函数实际上是关于最小化桶冲突和链接使用-hash. 虽然唯一的哈希是可取的,但它们并不是严格的要求。

0 投票
7 回答
3677 浏览

java - 优化 equals() 方法

equals()方法(就此而言,也是该compareTo()方法)可以成为性能热点(例如,在高流量中HashMap)。我想知道人们在证明必要时采用了哪些技巧来针对这些情况优化这些方法。

例如,IntelliJ IDEA 生成以下内容:

您还遇到什么可以作为编写良好执行equals()方法的指南?

0 投票
16 回答
281972 浏览

python - 通过属性比较对象实例是否相等

我有一个类MyClass,其中包含两个成员变量foobar

我有这个类的两个实例,每个实例都有相同的值foobar

但是,当我比较它们是否相等时,Python 会返回False

我怎样才能让python认为这两个对象相等?

0 投票
2 回答
1259 浏览

c# - 如何在 SQL 中使用类似 C# 的行为进行相等比较?

如何将 SQL 中的值相等与 null 进行比较?

对于熟悉 C# 的人,以下是比较可空值的结果:

我在 SQL 中找到的最简单的解决方案是将可为空的字段合并为一些标记值(例如“scoobydoo”),然后比较它们

但是,如果有人使用哨兵值,这很简单,如果 A 恰好为 NULL 而 B 是“scoobydoo”,那么上面的表达式将产生 true

这正是我询问上述代码逻辑的目的(T-SQL UPDATE 触发器):

如何在 SQL 中使用类似 C# 的行为进行相等比较?

[编辑:在这里找到答案]

测试了代码(Postgres 不错的布尔支持,FTW!):

[编辑:测试了乔恩的代码,他对等式的回答是半工作的(只是将 null 视为假),但他对不等式的回答会爆炸]

测试了代码(Postgres 不错的布尔支持,FTW!):

[编辑:发布了另一个与此相关的问题]

[编辑:基于 Jon 对不等式比较的非工作语义的调查发布的结果]

不平等的非工作语义促使我发布另一个问题:-)

[编辑:测试乔恩的新答案]

结果:

0 投票
3 回答
3352 浏览

c# - 在 LINQ 中以分钟精度确定 Datetime 值的相等性

我需要使用分钟精度比较两个日期时间值以确定相等性(完全相同)。这是最好的方法吗?我的日期可能有秒和毫秒,但我只想考虑到分钟。