how to filter associative arrays with foreach ?

Ali Çehreli acehreli at yahoo.com
Mon Jun 21 08:31:16 UTC 2021


On 6/20/21 8:59 PM, someone wrote:
> I often need to iterate through a filtered collection (associative 
> array) as following:
> 
> ```d
> string strComputerIDunwanted = "WS2"; /// associative array key to exclude
> 
> foreach (strComputerID, udtComputer; udtComputers) { /// ..remove!(a => 
> a == strComputerIDunwanted) ... ?
> 
>     if (strComputerID != strComputerIDunwanted) {
> 
>        ...
> 
>     }
> 
> }
> ```
> 
> Is there a way to filter the collection at the foreach-level to avoid 
> the inner if ?

Two options for byKey and byKeyValue:


import std;

void main() {
   auto aa = [ "WS2" : 42, "WS3" : 43 ];
   string strComputerIDunwanted = "WS2";
   foreach (key; aa.byKey.filter!(k => k != strComputerIDunwanted)) {
     writeln(key, ' ', aa[key]);
   }

   // 't' is the tuple of key and value
   foreach (t; aa.byKeyValue.filter!(t => t.key != strComputerIDunwanted)) {
     writeln(t.key, ' ', t.value);
   }
}

Ali



More information about the Digitalmars-d-learn mailing list