Как я могу узнать разницу двух векторов хешей в clojure? - PullRequest
2 голосов
/ 04 января 2011

У меня есть вектор, который содержит список хэш-карт в Clojure, и у меня есть надстройка для этого вектора, чтобы увидеть любые сделанные изменения. Есть ли простой способ сделать различия в изменениях, внесенных в хеш-карту, чтобы, возможно, я мог получить список только измененных записей в хеш-коде?

Примечание: это следует из некоторых моих предыдущих постов, где я пытался сохранить изменения в базе данных для структуры данных, хранящейся в ссылке. Я понял, что самый простой способ сохранить состояние - это просто наблюдать за изменениями и затем сохранять эти изменения. Мое идеальное решение было бы, если бы add-watch также был передан список изменений:)

1 Ответ

1 голос
/ 09 января 2011

Возможно, вам нужно определить "diff" немного точнее. Например, считается ли вставка в середине вектора как одно изменение или как изменение этого элемента и всех последующих? Также ваши векторы гарантированно имеют одинаковую длину?

Сказав это, простой подход будет выглядеть примерно так:

  • Сначала проверьте длину двух векторов. Если один длиннее, то учитывайте дополнительные элементы как изменения
  • Затем сравните все остальные элементы с соответствующим элементом в другом векторе, используя not = (это работает с хешами и будет очень быстрым в общем случае, когда элементы не изменились). Что-то, с чего можно начать: (карта не = вектор-1, вектор-2)
  • Затем вы можете использовать ответ из stackoverflow.com / questions / 3387155 / разницу-между-двумя-картами , упомянутый в pmf, если вы хотите точно узнать, как эти две карты отличаются.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...