On Thursday, 20 January 2022 at 12:40:09 UTC, Stanislav Blinov wrote:

Allocating 4 megs to generate 10 numbers??? You can generate a random number between 999000000 and 1000000000.

...
        // id needs to be 9 digits, and needs to start with 999
       x = uniform(999*10^^6, 10^^9);

       // ensure every id added is unique.
       if (!result[0 .. i].canFind(x))
           result[i++] = x;
    }
    import std.exception : assumeUnique;
    return result.assumeUnique;
...

Nice. Thanks. I had to compromise a little though, as assumUnique is @system, and all my code is @safe (and trying to avoid the need for inline @system wrapper ;-)

//---

void createUniqueIDArray(ref int[] idArray, int recordsNeeded)
{
    idArray.reserve(recordsNeeded);
debug { writefln("idArray.capacity is %s", idArray.capacity); }

    int i = 0;
    int x;
    while(i != recordsNeeded)
    {
       // generate a random 9 digit id that starts with 999
       x = uniform(999*10^^6, 10^^9); // thanks Stanislav!

       // ensure every id added is unique.
       if (!idArray.canFind(x))
       {
idArray ~= x; // NOTE: does NOT register with -profile=gc
           i++;
       }
    }
}

//---

Reply via email to