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++;
}
}
}
//---