Thread overview
std.random.uniform failing
Sep 03
remontoir
Sep 03
monkyyy
Sep 03
remontoir
September 03

Not really sure what is happening here.
This works is "None" is removed, but displays a silly answer or fails with "range is smaller than amount of items to pop" otherwise.

I guess it is related to enum being also integers ?

import std.stdio : write, writeln;
import std.random;
import std.algorithm.mutation : remove;

enum Axis { None, X, Y, Z }

void main() {
    Axis[] axes = [Axis.X, Axis.Y, Axis.Z];
    writeln("Original array: ", axes);

    auto axis = axes[uniform(0, axes.length)];
    writeln(axis);
    axes = axes.remove(axis);
    writeln("Array after removing ", axis, " : ", axes);
}

September 03

On Tuesday, 3 September 2024 at 11:57:42 UTC, remontoir wrote:

>

Not really sure what is happening here.
This works is "None" is removed, but displays a silly answer or fails with "range is smaller than amount of items to pop" otherwise.

I guess it is related to enum being also integers ?

import std.stdio : write, writeln;
import std.random;
import std.algorithm.mutation : remove;

enum Axis { None, X, Y, Z }

void main() {
    Axis[] axes = [Axis.X, Axis.Y, Axis.Z];
    writeln("Original array: ", axes);

    auto axis = axes[uniform(0, axes.length)];
    writeln(axis);
    axes = axes.remove(axis);
    writeln("Array after removing ", axis, " : ", axes);
}

I think your wrong about what remove does, axes=axes.remove(axis.length.uniform)

September 03

On Tuesday, 3 September 2024 at 12:09:36 UTC, monkyyy wrote:

>

I think your wrong about what remove does, axes=axes.remove(axis.length.uniform)

Duh !
You're right, remove does take indices or ranges.
Using filter, now ;)
axes.filter!(a => a != axis).array

thanks.