比较不可变数据类型

And*_*yuk 1 .net c# algorithm collections immutability

是否有一种普遍接受的方法来比较可能包含长值列表的不可变对象?

到目前为止,我的界面如下:

interface Formula : IEquatable<Formula> {
   IList<Symbol> Symbols {get;}
}

interface Symbol : IEquatable<Symbol> {
   String Value {get;}
}
Run Code Online (Sandbox Code Playgroud)

这里,immutable数据类型Formula表示一个序列Symbol.所以在一个公式中:

x -> y
Run Code Online (Sandbox Code Playgroud)

符号会x,->,y.

我想根据它们的内容比较两个公式(例如符号列表).所以,new Formula(symbols)就等于new Formula(symbols)对符号的一些任意列表.

但是,我不想一直迭代地比较两个列表.

在实现中,我在考虑在初始化期间创建某种计算值Formula- 并将其用于比较.但是,这将要求我向我的界面添加某种方法.我怎么称呼这种方法?

我不确定是否适合使用哈希代码,因为它似乎仅限于整数.

任何帮助表示赞赏 - 如果事情不明确,我会修改我的问题.谢谢!

Jon*_*eet 5

你绝对可以使用哈希码.不要忘记哈希码不必是唯一的 - 如果它没有给出冲突(两个具有相同哈希码的不相等序列)非常常见,它就会有所帮助.(至少,尝试提出一种方法,避免在明显情况下使用相同的哈希码.)

因此,您可以在构造时计算一次哈希码(通过依次组合每个符号的哈希码),然后GetHashCode每次都不重新计算它.这意味着您只需要将序列与相等的哈希码进行比较 - 这对于非相等的序列很少发生.