On 2/8/23 11:04, Alexander Zhirov wrote:

> That is, the result is arrays of table B that are missing OR not equal
> to arrays in table A.

This should do it:

alias MyType = string[string][int];

// 'a' is subtracted from 'b'
MyType difference(MyType b, MyType a) {
    MyType result;

    foreach (kv; b.byKeyValue) {
        auto existing = kv.key in a;

        if (!existing || (*existing != kv.value)) {
            result[kv.key] = kv.value;
        }
    }

    return result;
}

void main() {
    auto a = [
        4:["id":"4", "deleted":"f", "name":"6.2"],
        3:["id":"3", "deleted":"f", "name":"5.6_hwlister"],
        2:["id":"2", "deleted":"t", "name":"6.2"],
        1:["id":"1", "deleted":"f", "name":"5.6"]
    ];

    auto b = [
        6:["id":"6", "deleted":"f", "name":"6.2_test"],
        5:["id":"5", "deleted":"f", "name":"5.6_test"],
        4:["id":"4", "deleted":"f", "name":"6.2_hwlister"],
        3:["id":"3", "deleted":"f", "name":"5.6_hwlister"],
        2:["id":"2", "deleted":"f", "name":"6.2"],
        1:["id":"1", "deleted":"f", "name":"5.6"]
    ];

    auto expected = [
        6:["id":"6", "deleted":"f", "name":"6.2_test"],
        5:["id":"5", "deleted":"f", "name":"5.6_test"],
        4:["id":"4", "deleted":"f", "name":"6.2_hwlister"],
        2:["id":"2", "deleted":"f", "name":"6.2"]
    ];

    auto diff = difference(b, a);

    import std.format;
    assert(diff == expected, format!"UNEXPECTED: %s"(diff));
}

Ali

Reply via email to