Converting from DirIterator to string[] without a loop
    Dave Chapman via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Fri Jan 13 16:29:05 PST 2017
    
    
  
I would like to do something like the code shown below but I 
can't figure out how to do
it without loops inside the if statement.
When I use auto and print out the type of b it is  something like
args.main.FilterResult!(__lambda2, DirIterator).FilterResult and 
for the "if" version of
b and args.main.FilterResult!(__lambda3, 
DirIterator).FilterResult for the "else" version
so they are really different types. I have tried making b an 
array of DirEntry and an
array of strings but that doesn't compile. Both expressions for b 
compile and run.
I can put a foreach loop inside the if statement and convert b to 
an array of strings but that
seems clumsy and not idiomatic D. Is there a way to do this 
without the conversion loop
inside both branches of the if - else stament? Is there a way to 
use to!string or cast?
// Is it possible to make this work?
theResultType b;
if (some_contition) {
   b = dirEntries("directory", SpanMode.shallow).filter!(f => 
(f.name == "file_name.txt") );
} else {
   b = dirEntries("directory", SpanMode.shallow).filter!(f => 
(f.name.endsWith(".d") )'
}
foreach(file; b) {
    do some stuff
}
// This works but seems clumsy and not idiomatic D
string[] c = "";
if (some_contition) {
   auto b = dirEntries("directory", SpanMode.shallow).filter!(f => 
(f.name == "file_name.txt") );
   foreach (file; b) {
     c = c ~ file;
   }
} else {
   auto b = dirEntries("directory", SpanMode.shallow).filter!(f => 
(f.name.endsWith(".d") )'
     foreach (file; a) {
       c = c ~ file;
     }
}
foreach(file; c) {
    do some stuff
}
    
    
More information about the Digitalmars-d-learn
mailing list