标签: equality

我做错了什么(在python中实现重载的替代等式)

一个人问了一个关于如何使用替代的相等函数在python中获取列表唯一函数的问题.

我认为可以通过继承元素类并重载相等函数来完成

import functools
@functools.total_ordering
class ffloat(float):
def __eq__(self,other):
    if floor(self) == floor(other):
        return True
    else:
        return False
def __le__(self,other):
    if self == other:
        return True
    else:
        return float(self) <= float(other)
def __hash__(self):
    return floor(self)


a = map(ffloat,[4.3,8,8.9, 13])


In [41]: a[1] == a[2]
Out[41]: True
Run Code Online (Sandbox Code Playgroud)

In [42]: set(a)
Out[42]: set([4.3, 8.0, 8.9, 13.0])
Run Code Online (Sandbox Code Playgroud)

编辑:用平面相等替换abs <1.5相等
添加Hash PS有一种方法可以使一个类和两个lambda创建一个类工厂,并返回一个继承第一个类的类,覆盖所需的相等函数.

python equality wrapper

1
推荐指数
1
解决办法
91
查看次数

Java hashCode()方法是对象相等的可靠度量吗?

我目前正在比较两个相同类型的复杂对象,其中多个字段由自定义对象类型的数据结构组成.假设没有任何自定义对象覆盖该hashCode()方法,如果我比较对象中每个字段的哈希码,并且它们结果是相同的,那么我是否100%确信比较对象的内容是相同?如果没有,假设我不能使用任何外部库,那么您建议使用哪种方法来比较两个对象.

java compare equality hashcode

1
推荐指数
1
解决办法
1328
查看次数

在显式接口实现的C#中实现==运算符

我已经定义了一个struct Coords,它显式地实现了三个接口,每个接口定义如下:

  public partial struct Coords
  {
    int           ICoordsUser.X          { get { return VectorUser.X; } }
    int           ICoordsUser.Y          { get { return VectorUser.Y; } }
    IntVector2D   ICoordsUser.Vector     { get { return VectorUser;   }
                                           set { VectorUser=value;    } }
    ICoordsCanon  ICoordsUser.Canon      { get { return this;         } } 
    ICoordsUser   ICoordsUser.Clone()    { return NewUserCoords(VectorUser);  }
    string        ICoordsUser.ToString() { return VectorUser.ToString(); }

    IEnumerable<NeighbourCoords> ICoordsUser.GetNeighbours(Hexside hexsides) { 
        return GetNeighbours(hexsides); 
    }
    int ICoordsUser.Range(ICoordsUser coords) { return Range(coords.Canon); }
  }
Run Code Online (Sandbox Code Playgroud)

与名字ICoordsCanon,ICoordsUser和 …

c# equality interface operator-overloading

1
推荐指数
1
解决办法
318
查看次数

使用Enum类型的HashSet进行奇数相等?

我有两个哈希集,我用不同的方式构造,包含所有枚举值.

    setWithAllEnums.Equals(setToTest); //  Returns false

    !(setWithAllEnums.Except(setToTest).Any());  //  Returns True


为什么这些不相同?.NET没有为枚举提供GetHashCode吗?

c# equality hashset

1
推荐指数
1
解决办法
471
查看次数

为什么在scala中整数和浮点之间的比较如71 == 71.0是真的?

我在scala解释器中得到了这个:

scala> val a:Float = 71F; val b:Int = 71; if (a==b) println ("?")
?
a: Float = 71.0
b: Int = 71
Run Code Online (Sandbox Code Playgroud)

我想知道这种比较的确切语义是什么.即使我对Scala有一个肤浅的知识,我猜浮点数运算(在这种情况下,我确保不使用与java的BigDecimal相当的东西,或者至少我认为)适用于这个例子.所以"a"不是持有数字71,因为"b"是,但接近它.

我认为任何整数到浮点比较产生错误会简化事情,但我相信我必须遗漏一些东西.

另外,我想知道这是否会导致代码中的任何错误.

scala equality

1
推荐指数
1
解决办法
147
查看次数

如何强制HashMap使用身份(哈希码)?或建议解决方法

之前我已经编写了HashMap来存储一些对象,这些对象期望在存储它们时使用身份.即如果Object.equals()这样说,对象被视为"相同" .

后来我用内容评估范例对这些对象的类进行编码hashCode()和编写equals()方法.我的上一次立即HashMap停止工作,因为对象正在变异并变得不平等.

如何插入一些简单的解决方法,使早期的代码工作?可能有一种方法强制HashMap使用身份,尽管有定义equals()hashCode()方法的事实?

java equality hashmap mutable

1
推荐指数
1
解决办法
573
查看次数

如何在printf占位符中使用等于表达式?

我有以下代码片段:

main( )
{
int k = 35 ;
printf ( "\n%d %d %d", k == 35, k = 50, k > 40 ) ;
}
Run Code Online (Sandbox Code Playgroud)

产生以下输出

0 50 0
Run Code Online (Sandbox Code Playgroud)

我不知道我理解的第一个值怎么printf0.当值k与之比较时35,理想情况下它应该返回(并因此打印)1,但它如何打印为零?产生的其他两个值 - 50并且0都是正确的,因为在第二个值中,k的值被视为50,而对于第三个值,k的值(即35)被比较40.因为35 < 40,所以它打印0.

任何帮助将不胜感激,谢谢.

**更新**

在研究了关于这个主题的更多内容之后undefined behavior,我在一本关于C的书中看到了这一点,最后给出了源代码.

调用约定 调用约定表示在遇到函数调用时参数被传递给函数的顺序.这里有两种可能性:

  1. 参数可能从左向右传递.
  2. 参数可能从右到左传递.

C语言遵循第二顺序.

考虑以下函数调用:

fun (a, b, c, d ) ;
Run Code Online (Sandbox Code Playgroud)

在这个调用中,参数是从左向右还是从右向左传递并不重要.但是,在某些函数调用中,传递参数的顺序成为一个重要的考虑因素.例如:

int a = 1 ;
printf …
Run Code Online (Sandbox Code Playgroud)

c printf equality undefined-behavior assignment-operator

1
推荐指数
1
解决办法
420
查看次数

符号处理:无法比较身份

我不明白为什么

(setq a_sym 'abc)
(print (eq a_sym 'abc))

(print (eq 'x 'x))
(print (eq (first '('x 2 3)) 'x))
Run Code Online (Sandbox Code Playgroud)

版画

T 
T 
NIL 
Run Code Online (Sandbox Code Playgroud)

为什么'x第三个语句中的符号与第二个语句的处理方式不同?并且,脚踏实地,如何比较它们的身份?

lisp equality common-lisp quote

1
推荐指数
1
解决办法
49
查看次数

如何覆盖没有任何数字作为字段的GetHashCode()?

所有资源显示如何覆盖Equals(object)GetHashCode()使用数字字段来实现该GetHashCode()方法:

实现Equals方法
Equals和GetHashCode的最佳策略是什么?
为什么在重写Equals方法时重写GetHashCode很重要?

但是,在我的课上,我没有任何数字字段.它是树中的节点,引用其父节点,子节点和接口作为数据:

public class Node
{
    private IInterface myInterface;
    private Node parent;
    private List<Node> children = new List<Node>();

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
        {
            return false;
        }
        var node = (Node)obj;
        return myInterface == node.myInterface;
    }

    public override int GetHashCode()
    {
        ???
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该用什么设置哈希码?

c# equality hashcode iequalitycomparer gethashcode

1
推荐指数
1
解决办法
318
查看次数

检查引用是否指向C++中的特定对象

如何检查引用是否指向C++中的特定对象?

我的意思是这样的:

int x(0);
int& xR = x;
if(xR == x)
{
//xR is refering to x
}
else
{
//xR is not refering to x
}
Run Code Online (Sandbox Code Playgroud)

c++ equality reference

1
推荐指数
1
解决办法
51
查看次数