Comparison of multidimensional associative arrays

Ali Çehreli acehreli at yahoo.com
Wed Feb 8 19:32:22 UTC 2023


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



More information about the Digitalmars-d-learn mailing list