Мне нужно сравнить два списка правил формы var -> integer
о факте несоответствия.
Чтобы определить, существуют ли какие-либо правила то же самое по lhs и разные по rhs.Как сравнить два списка правил?
Например:
{а-> 3, b-> 1, C-> 4} ~ ??? ~ {a-> 3, b-> 1, c-> 4} = true
{a-> 3, b-> 1, c-> 4} ~ ??? ~ {А-> 3, b-> 2, C-> 4} = FALSE
{а-> 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 и все л.ш. уникальны, если это может помочь сделать как простая функция как возможно.
UPD: забыл одну вещь! Списки могут иметь разную длину. Но похоже, что все три текущих ответа остаются в силе.
В дополнение к размеру, это решение в 3 раза быстрее по моим данным, чем другие два. – Nakilon
@Nakilon Если скорость является проблемой, оберните правила на r.h.s. из '/ .' в' Dispatch' - это должно ускорить код, как для моей версии, так и для @ Heike. –