Thread overview | |||||
---|---|---|---|---|---|
|
September 02, 2016 Equivalent of FirstOrDefault with ranges | ||||
---|---|---|---|---|
| ||||
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 |
September 02, 2016 Re: Equivalent of FirstOrDefault with ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lutger | 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. |
September 02, 2016 Re: Equivalent of FirstOrDefault with ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lutger | 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;
}
|
Copyright © 1999-2021 by the D Language Foundation