如何在 Julia 中使用结构作为 Dict 中的键?

GLe*_*Lee 4 julia

如何使用结构体作为字典中的键?当我有一个包含矩阵的结构时,我的字典中会出现重复的键。

这是一个最小的例子:

struct Test
  b::Matrix
end

a = Dict()
a[Test(fill(0, (2, 2)))] = 1
a[Test(fill(0, (2, 2)))] = 2
Run Code Online (Sandbox Code Playgroud)

结果是:

Dict{Any, Any} with 2 entries:
  Test([0 0; 0 0]) => 2
  Test([0 0; 0 0]) => 1
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我有两把外观相同的钥匙。我也尝试过覆盖==isequal

GLe*_*Lee 5

您需要覆盖isequalhash。例如:

import Base.isequal, Base.hash
function isequal(t1::Test, t2::Test)
  return t1.b == t2.b
end

function hash(t::Test)
  return hash(t.b)
end
Run Code Online (Sandbox Code Playgroud)