www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Equivalent of FirstOrDefault with ranges

reply Lutger <lutger.blijdestijn gmail.com> writes:
I was looking for something like FirstOrDefault* from .NET in 
phobos. For example, I have this piece of code:

string findBobOrReturnNull(string[] names)
{
     auto r = names.find("bob");
     if(r.empty) return null;
     return r.front;
}

assert(findBobOrReturnNull(["alice", "bob"]) == "bob");
assert(findBobOrReturnNull(["alice"]) is null);

How can I turn that into something like this, or is there another 
idiomatic way to write it as a single expression?

string findBobOrReturnNull(string[] names)
{
     return names.find("bob").firstOrDefault;
}

* 
https://msdn.microsoft.com/en-us/library/bb340482%28v=vs.110%29.aspx
Sep 01 2016
next sibling parent Cauterite <cauterite gmail.com> writes:
On Friday, 2 September 2016 at 06:56:07 UTC, Lutger wrote:

You could do:
names.find("bob").chain(only(``)).front;
It's not very expressive though.
Sep 02 2016
prev sibling parent Nicholas Wilson <iamthewilsonator hotmail.com> writes:
On Friday, 2 September 2016 at 06:56:07 UTC, Lutger wrote:
 I was looking for something like FirstOrDefault* from .NET in 
 phobos. For example, I have this piece of code:

 string findBobOrReturnNull(string[] names)
 {
     auto r = names.find("bob");
     if(r.empty) return null;
     return r.front;
 }

 assert(findBobOrReturnNull(["alice", "bob"]) == "bob");
 assert(findBobOrReturnNull(["alice"]) is null);

 How can I turn that into something like this, or is there 
 another idiomatic way to write it as a single expression?

 string findBobOrReturnNull(string[] names)
 {
     return names.find("bob").firstOrDefault;
 }

 * 
 https://msdn.microsoft.com/en-us/library/bb340482%28v=vs.110%29.aspx
ElementType!R firstOrDefault(R)(R r, ElementType!R def = (ElementType!R).init) if(isInputRange!R) { if(r.empty) return def; return r.front; }
Sep 02 2016