Juliaで複合タイプのSet
を使用している場合、push!
関数は重複した項目をセットに追加するようです。 Julia標準のドキュメントを読んで、私はisequal
関数が重複をテストするために使われると仮定しました。私は誤解していると思うので、おそらく誰かが私を助けることができます。なぜpush!()はセットに重複要素を追加しますか?
例として、以下のコードを参照してください。特にt1
と同じであるにもかかわらず、t2
がセットに追加された理由を知りたいと思います。
ご協力いただきありがとうございます。注:私の場合、フィールドx1
とx2
が等しい場合、タイプt
の2つの変数は同一と見なされます。残りのフィールドの値は関係ありません。
type t
x1::Float64
x2::Float64
b1::Bool
b2::Bool
end
isequal(tx::t, ty::t) = (tx.x1 == ty.x1) && (tx.x2 == ty.x2)
==(tx::t, ty::t) = (tx.x1 == ty.x1) && (tx.x2 == ty.x2)
t1 = t(1, 2, true, true)
t2 = t(1, 2, true, true)
tc = t1
tdc = deepcopy(t1)
[ t1 == t2 isequal(t1, t2)] # ---> [ true true ]
[ t1 == tc isequal(t1, tc)] # ---> [ true true ]
[ t1 == tdc isequal(t1, tdc)] # ---> [ true true ]
s = Set{t}()
push!(s, t1)
push!(s, t2) # adds t2 to the set although t2 and t1 are identical ...
push!(s, tc) # does not add ...
push!(s, tdc) # adds tdc although tdc and t1 are identical
は説明[ここ](http://stackoverflow.com/questions/34936593をい/ overload-object-comparison-juliaに追加するとき)ハッシュについての質問に答えますか? – DSM
その話を私に指摘してくれてありがとう。 – InkPen