On Friday, 9 January 2015 at 10:02:53 UTC, ketmar via Digitalmars-d-learn wrote:

  import std.algorithm, std.stdio;

  void main () {
    string s = "he is at home";
if (["home", "office", "sea", "plane"].canFind!((a, string b) => b.canFind(a))(s)) {
      writeln("got it!");
    } else {
      writeln("alas...");
    }
  }

Thank you.

The code is the best,and it's better than indexOfAny in C#:

/*  places.canFind!(a => strWhere.canFind(a));  */

By  auto r = benchmark!(f0,f1, f2, f3,f4)(10_0000);

Result is :
filter is          42ms 85us
findAmong is       37ms 268us
foreach indexOf is 37ms 841us
canFind is         13ms
canFind indexOf is 39ms 455us

-----------------------5 functions--------------------------
import  std.stdio, std.algorithm,std.string;

auto places = [ "home", "office", "sea","plane"];
auto strWhere = "He is in the sea.";

void main()
{
  auto where = places.filter!(a => strWhere.indexOf(a) != -1);
        writeln("0 Result is  ",where);
        
        auto where1 = findAmong(places,strWhere);
        writeln("1 Result is  ",where1);
        
        string where2;
        foreach(a;places)
        {
                if(strWhere.indexOf(a) !=-1)
                {
                  where2 = a;
                 break;
                }
        }
        writeln("2 Result is  ",where2);
        
        auto where3 = places.canFind!(a => strWhere.canFind(a));
        writeln("3 Result is  ",where3);
        
        auto where4 = places.canFind!(a => strWhere.indexOf(a) != -1);
        writeln("4 Result is  ",where4);
}

Frank

Reply via email to