Best way to check for an element in an array?

Timothee Cour via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Apr 21 20:50:05 PDT 2014


you can use stuff.canFind(2)

but sometimes it'd be more convenient to have the other way around (UFCS
chains etc);

how about:

bool isIn(T,T2...)(T needle, T2 haystack)
if(__traits(compiles,T.init==T2[0].init)){
  foreach(e;haystack){
    if(needle==e) return true;
  }
  return false;
}
unittest{
assert(1.isIn(3,1,2) && !4.isIn(3,1,2));
}





On Mon, Apr 21, 2014 at 8:25 PM, Taylor Hillegeist via Digitalmars-d-learn <
digitalmars-d-learn at puremagic.com> wrote:

> So I find myself Doing this kind of thing very frequently. I have a Array
> of Somethings and i want to see if "something specific" is inside the
> array. I wrote a template for it. but is this the best way to do this kind
> of thing. I feel like it doesn't help with readability. Is there a better
> way? Maybe i missed something in the std library.
>
> import std.stdio;
>
> template FNDR(T){
>     bool isIn(T Element, T[] Array){
>         bool rtn=false;
>         foreach(T ArrayElement; Array){
>             if(Element==ArrayElement){
>                 rtn=true;
>             }
>         }
>     return rtn;
>     }
> }
>
> void main(string[] args)
> {
>     int[3] stuff=[0,1,2];
>     if (FNDR!int.isIn(2,stuff))
>     {
>         writeln("Hello World!");
>     }
> }
>
>
> Is there a way maybe to make it look like this?
>
> import std.stdio;
>
> template FNDR(T){
>     bool contains(T[] Array,T Element){
>         bool rtn=false;
>         foreach(T ArrayElement; Array){
>             if(Element==ArrayElement){
>                 rtn=true;
>             }
>         }
>     return rtn;
>     }
> }
>
> void main(string[] args)
> {
>     int[3] stuff=[0,1,2];
>     if (stuff.contains(2)) // Much clean! stuff.FNDR!int.contains(2)
> doesn't work
>     {
>         writeln("Hello World!");
>     }
> }
>
> I'm interested in what you guys think? what is the cleanest way to do this?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20140421/34156d9c/attachment.html>


More information about the Digitalmars-d-learn mailing list