DeepDiff icon indicating copy to clipboard operation
DeepDiff copied to clipboard

How to apply the changes to old-array

Open GloamZz opened this issue 3 years ago • 2 comments

In my situation, I make diffing between two different classes packaged by the same enum. As: enum PackagingEnum: DiffAware { case a(ClassA) case b(ClassB)

var diffId: Int {
    switch self {
    case a(let classA):
        return classA.hashValue
    case b(let classB)
        return classB.hashValue
    }
}

} in this case, I want to make diffing [ClassA] to [ClassB] via DeepDiff.

but when I get the changes by 'diff(old: [Enum-B], new: [Enum-A])'

I traverse the changes, and invoke 'insert/remove/move' in [Enum-B](the old), I get crashed because of 'Out of Range'

GloamZz avatar Jul 06 '22 07:07 GloamZz

Message that will be displayed on users' first issue

github-actions[bot] avatar Jul 06 '22 07:07 github-actions[bot]

For example I diff [1, 2, 3, 4, 5] to [1] I will get changes in order that [.delete(Index1), .delete(Index2), , .delete(Index3), , .delete(Index4)] I traverse the changes in order for change in changes { if case let .delete(delete) = change { old.remove(at: delete.index) } } I will get crashed when remove index3 because of out of range.

Of course, I can sort the changes by index. But I can't convert the old to the new if the changes mixed with insert&move

GloamZz avatar Jul 06 '22 08:07 GloamZz