On Monday, 30 December 2019 at 23:15:48 UTC, JN wrote:
On Sunday, 29 December 2019 at 08:31:13 UTC, mipri wrote:

int i = a.countUntil!(v => v == 55);
assert(i == 2);

I also had to ask because I couldn't find it. In other languages it's named "index()", "indexOf()" or "find()". D is the only language I know which uses the "countUntil" scheme. And even so it's not obvious from the name if it's the index of the element or number of preceding elements.


I had first tried myarray.index(myvalue) because I coulda sworn I wrote exactly that syntax a only a few days ago. But I've been hopping between languages, some D, some Crystal, some C++, some Javascript, and with only two cerebral hemispheres, maybe I got confused. So, D doesn't have index()? Is it called find()? Something else? It was hard to find the right stuff in the documentation.

So now I know about countUntil, and I'm glad the question has gotten some traction for others to make progress with their code. I'm needing to see more examples. It might have something to do with the array I'm working with being inside a foreach loop. My code looks like this, with the problematic line duplicated to show some of the variations I tried:

    import std.algorithm;

    alias doo = ubyte;
    struct Info
    {
        int x;
        doo[NDOOS] doos;   // NDOOS = 10
    }

    immutable int INFO = 100000;
    Info[NINFOS]  infos;    // global array, used heavily.

    float foo_function(doo important_d)    {
      ...
      foreach (info; infos)    {

int i = info.doos.index(important_d); // #1 int i = info.doos.countUntil(d => d == important_d); // #2 int i = info.doos.countUntil!(d => d == important_d); // #3 int i = countUntil(d => d == important_d, info.doos); // #4 int i = countUntil!(d => d == important_d)(info.doos); // #5

        if (i>=0)  {  // assuming -1 represents value not found
             ... do stuff with i ...
        }
      }
      ...
    }

All the lines shown give me

    "template ... cannot deduce function from argument types..."

but one time I got, but cannot reproduce now, the error
"Error: template instance countUntil!((d) => d == important_d, doos) has no value"

Reply via email to