liufengyun / hashdiff

Hashdiff is a ruby library to to compute the smallest difference between two hashes
MIT License
559 stars 63 forks source link

Getting (+-) instead of diff (tilde) when comparing arrays #81

Open stripedpumpkin opened 4 years ago

stripedpumpkin commented 4 years ago

Hello. I find the following behavior (using Hashdiff 1.0.1) somewhat unexpected:

Hashdiff.diff(%w[a b c], %w[a b d])
=> [["-", "[2]", "c"], ["+", "[2]", "d"]]

Would not it be better to get

Hashdiff.diff(%w[a b c], %w[a b d])
=> [["~", "[2]", "c", "d"]]

?

Is there an option to get this behavior ?

Thanks for reading!

liufengyun commented 4 years ago

I think it's possible to achieve that. It will be much appreciated if someone can give a hand on this.

krzysiek1507 commented 4 years ago

This does it:

Hashdiff.diff(%w[a b c], %w[a b d], use_lcs: false)
liufengyun commented 4 years ago

This does it:

Hashdiff.diff(%w[a b c], %w[a b d], use_lcs: false)

This is a workaround. I'm wondering if it is possible to make the algorithm smarter. Conceptually, it seems possible.

krzysiek1507 commented 4 years ago

Does LCS algorithm have a strict specification?

liufengyun commented 4 years ago

Does LCS algorithm have a strict specification?

I don't think it has. The tests + implementation are the de facto spec. In this case, the algorithm performs better, it might be acceptable to users even if it differs from previous results.