我需要比较两个 var -> integer
形式的规则列表,以了解不匹配的情况。
判断是否存在lhs相同而rhs不同的规则。
例如:
{a->3, b->1, c->4} ~ ??? ~ {a->3, b->1, c->4} = true
{a->3, b->1, c->4} ~ ??? ~ {a->3, b->2, c->4} = false
{a->3, b->1, c->4} ~ ??? ~ {a->1, b->3, c->4} = false
{a->3, b->1, c->4} ~ ??? ~ {c->4, d->8, e->9} = true
{a->3, b->1, c->4} ~ ??? ~ {d->8, e->9, f->7} = true
在我的例子中,它们已经按lhs排序,并且所有lhs都是唯一的,如果它有助于使函数尽可能简单。
UPD:忘记了一件事!列表的长度可以不同。但似乎当前所有三个答案仍然有效。
最佳答案
这是另一个解决方案:
In[12]:= check[a:{__Rule}, b:{__Rule}] := FilterRules[a, b] === FilterRules[b, a]
In[18]:= {{a -> 3, b -> 1, c -> 4}~check ~ {a -> 3, b -> 1, c -> 4} ,
{a -> 3, b -> 1, c -> 4}~check ~ {a -> 3, b -> 2, c -> 4},
{a -> 3, b -> 1, c -> 4}~check ~ {a -> 1, b -> 3, c -> 4},
{a -> 3, b -> 1, c -> 4}~check ~ {c -> 4, d -> 8, e -> 9},
{a -> 3, b -> 1, c -> 4}~check ~ {d -> 8, e -> 9, f -> 7}}
Out[18]= {True, False, False, True, True}
(这依赖于选项列表已经排序的事实。)
关于comparison - 如何比较两个规则列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7725482/