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- 并将其用于比较.但是,这将要求我向我的界面添加某种方法.我怎么称呼这种方法?
我不确定是否适合使用哈希代码,因为它似乎仅限于整数.
任何帮助表示赞赏 - 如果事情不明确,我会修改我的问题.谢谢!
你绝对可以使用哈希码.不要忘记哈希码不必是唯一的 - 如果它没有给出冲突(两个具有相同哈希码的不相等序列)非常常见,它就会有所帮助.(至少,尝试提出一种方法,避免在明显情况下使用相同的哈希码.)
因此,您可以在构造时计算一次哈希码(通过依次组合每个符号的哈希码),然后GetHashCode每次都不重新计算它.这意味着您只需要将序列与相等的哈希码进行比较 - 这对于非相等的序列很少发生.
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |