标签: equality

确定树木是否"平等"

我正在使用Perl,我需要确定两个算术表达式树是否"相等".平等,我的意思是树的形状是相等的,而不是其中的特定值.所以,例如['internal',' - '['leaf',5] ['leaf',4]]与['internal','average',['internal','+', ['leaf',42],['leaf',10]],['leaf',1]],但与['internal','+'['leaf',3] ['leaf'相同,20]].所以,我只是想匹配形状.我有一个子程序,我希望能够做到这一点,但到目前为止,我无法使其正确匹配.这是子程序:

sub isEqualShape {
    my ($ex1, $ex2) = @_;
    my $node_type = $ex1->[0];
    my $node_type2= $ex2->[0];
    my $check;
    foreach (@$ex1){
        if ( $node_type eq 'leaf' && $node_type2 eq 'leaf'){
            $check = 1;
        }
        elsif ($node_type eq 'internal' && $node_type2 eq 'internal'){
            $check = 1;
        }
        else {
            $check = 0;
            return 0;
            last;
        }
    }
    foreach (@$ex2){
        if ( $node_type eq 'leaf' && $node_type2 eq 'leaf'){
            $check = 1;
        }
        elsif ($node_type eq 'internal' && …
Run Code Online (Sandbox Code Playgroud)

tree perl equality

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

如何检查Python 2.5中的类相等?

我查看了Python 2.5文档,我找不到这个答案:如何检查一个对象是否与另一个对象是同一个类?

def IsClass(obj1, obj2):
     return obj1.class == obj2.class #doesn't work
Run Code Online (Sandbox Code Playgroud)

python equality class python-2.5

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

为什么两个相等对象必须具有相同的哈希值?

NSObject协议参考说"如果两个对象相等,它们必须具有相同的哈希值."

为什么必须?没有相同哈希值的两个相等对象可能会出现什么问题?

cocoa equality objective-c nsobject

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

php sha1不等于java sha1

可能重复:
Java的MessageDigest SHA1算法返回的结果与php的SHA1函数不同

我用的是什么:

Java的:

public String sha1(String s) {
    try {
        // Create MD5 Hash
        MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();

        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < messageDigest.length; i++)
            hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
        return hexString.toString();

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}
Run Code Online (Sandbox Code Playgroud)

结果:

java: System.out.println(sha1("foobar123dsadn23u1wdqqwdyxdasd"));
php:                echo sha1('foobar123dsadn23u1wdqqwdyxdasd');

php:  d8033103e9aaf67af13a4b45534b2d0f6d8dfded
java: d83313e9aaf67af13a4b45534b2df6d8dfded
Run Code Online (Sandbox Code Playgroud)

为什么两个哈希不一样?

php java hash sha1 equality

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

在JavaScript中,Equal to('=='和'===')之间的区别是什么?

我试图理解JavaScript中的相等性.这是代码.

    var x = prompt("What is 10 + 10");
    if (x === 10) {
        document.write("Correct")
    }
    else {
        document.write("Incorrect")
    }
Run Code Online (Sandbox Code Playgroud)

为什么我不能像"==="那样制作等号.所以如果"10"等于("===")到"x"(用户回答)那么它应该是正确的吗?

我搜索了Stack Overflow和W3Schools,但找不到我想要的东西.我想我只是得到这个"真或假"的东西.我的意思是,这似乎是一个非常简单的等式.帮助会很棒谢谢你们!

html javascript equality

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

为什么GetHashCode应该实现与Equals相同的逻辑?

这个MSDN页面中,它说:

警告:

如果重写GetHashCode方法,则还应该重写Equals,反之亦然.如果在对两个对象进行相等性测试时,重写的Equals方法返回true,则重写的GetHashCode方法必须为两个对象返回相同的值.

我也看到了许多类似的建议,我可以理解,当重写Equals方法时,我也想要覆盖GetHashCode.据我所知,GetHashCode与哈希表查找一起使用,这与等式检查不同.

这是一个帮助解释我想问的例子:

public class Temperature /* Immutable */
{
    public Temperature(double value, TemperatureUnit unit) { ... }

    private double Value { get; set; }
    private TemperatureUnit Unit { get; set; }

    private double GetValue(TemperatureUnit unit)
    {
        /* return value converted into the specified unit */
    }

    ...

    public override bool Equals(object obj)
    {
        Temperature other = obj as Temperature;
        if (other == null) { return false; }
        return (Value == other.GetValue(Unit));
    }

    public …
Run Code Online (Sandbox Code Playgroud)

c# equality gethashcode

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

C# - 具有接口类型列表的相等运算符无法按预期工作

请考虑以下代码,其中ClassOne的类派生自IClass:

List<IClass> list = new List<IClass>();
list.Add(new ClassOne("foo", "bar"));
list.Add(new ClassOne("baz", "bam"));

List<IClass> list2 = new List<IClass>();
list2.Add(new ClassOne("foo", "bar"));
list2.Add(new ClassOne("baz", "bam"));

if (list == list2)
    Console.WriteLine("Lists are equal.");
else
    Console.WriteLine("Lists are NOT equal.");
Run Code Online (Sandbox Code Playgroud)

等于运算符返回false(即表不匹配),除了事实的operator ==,operator !=,Equals(ClassOne),Equals(object)GetHashCode()已实施/被重写ClassOne.这是为什么?我希望等于运算符返回true.是否还有其他方法/接口必须实现才能使==操作员按预期工作?

供参考,这里是ClassOne和的实现IClass:

public interface IClass
{
    string getA();
    string getB();
} //interface


public class ClassOne : IClass, IEquatable<ClassOne>
{
    public ClassOne(string …
Run Code Online (Sandbox Code Playgroud)

c# collections equality equals operators

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

'String#reverse'如何返回非''String'对象?

我有一节课Word:

class Word < String
end

w = Word.new("level")
y = w.reverse
y.class # => Word
Run Code Online (Sandbox Code Playgroud)

1)这怎么可能?Word#reverse应该返回一个String因为它继承String#reverse,返回一个String.

我添加了这段代码:

class Word < String
  attr_accessor :s

  def magic
    @s = Time.now
  end
end

y.magic
sleep(5)
w.magic
y.s == w # => false
y == w # => true
Run Code Online (Sandbox Code Playgroud)

2)w并且yWord,并且是相同的,因此它们都具有相同的方法,例如magic.哪里y获得了这个magic方法?

3)如何来y == w评估为true消磨y.sw.s返回值的不平等?

ruby equality return-type

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

Lisp案例具有不同的等式谓词

作为Tic Tac Toe玩机器人的一部分,我需要一个功能来评估瓷砖与点的组合.代码看起来像这样:

(case combination
    ("EEEEE" 0)
    ("EEEEP" 1)
    ("EEEPE" 1)
    ("EEEPP" 2)
    ("EEPEE" 1)
    ("EEPEP" 2)
    ("EEPPE" 2)
    ("EEPPP" 3)
    ("EPEEE" 1)
    ("EPEEP" 2)
    ("EPEPE" 2)
    ("EPEPP" 3)
    ("EPPEE" 2)
    ("EPPEP" 3)
    ("EPPPE" 3)
    ("EPPPP" 4)
    ("PEEEE" 1)
    ("PEEEP" 2)
    ("PEEPE" 2)
    ("PEEPP" 3)
    ("PEPEE" 2)
    ("PEPEP" 3)
    ("PEPPE" 3)
    ("PEPPP" 4)
    ("PPEEE" 2)
    ("PPEEP" 3)
    ("PPEPE" 3)
    ("PPEPP" 4)
    ("PPPEE" 3)
    ("PPPEP" 4)
    ("PPPPE" 4)
    ("PPPPP" 5))
Run Code Online (Sandbox Code Playgroud)

(这不是讨论这种方法的价值的地方,因为它被用于与问题无关的原因)

问题是case使用的谓词对于不是同一个对象的相同字符串不返回true(如果是eq或eql则很难找到).你怎么能改变它?

编辑:我通过将字符串转换为相应的二进制数来解决原始问题,可以使用eql进行比较或用作列表中的索引.

equality predicate common-lisp

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

在Rust中检查两个HashMap是否具有相同的键集

假设我有两个HashMaps(或任何具有映射到其他键的键的映射结构)map1和map2,并且我想确保它们具有相同的键集。需要注意的是,钥匙都在地图同一类型,但不会

我最初的尝试只是:

map1.keys().eq(map2.keys())
Run Code Online (Sandbox Code Playgroud)

并且,尽管这是一次成功,但迭代器的eq函数(可以理解)似乎按照迭代器产生的顺序比较键,而不是通过检查第二个迭代器中任何地方是否存在键来进行比较。这与HashMap :: keys()生成一个迭代器(其中顺序是不确定的)相结合的事实意味着,即使键的集合(从集合论的角度来看)是相等的,相等函数也经常会失败。相同。

因此,我的下一个尝试是制作一个执行此操作的函数:

fn keys_match<T:std::cmp::Eq + std::hash::Hash,U,V>(map1:&HashMap<T,U>, map2:&HashMap<T,V>) -> bool {
  // Make sure that map1.keys() ? map2.keys()
  for key in map1.keys() {
    match map2.get(key) {
      None => return false,
      Some(_) => {}
    }
  }
  // If map1.keys() ? map2.keys() and their sizes equal, then the sets are equal
  map1.len() == map2.len()
}
Run Code Online (Sandbox Code Playgroud)

Rust初学者注意:实际上,我的第一次尝试是知道映射中的键是String类型的,所以我的函数签名是:

fn keys_match<T,U>(map1:&HashMap<String,T>, …
Run Code Online (Sandbox Code Playgroud)

iterator equality rust

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