On Sunday, 5 November 2023 at 18:36:40 UTC, Ctn-Dev wrote:
I wrote this earlier:

[...]

if runs when both "One" and "Two" are in the given array as intended, but its conditional statement looks verbose. Is there a more concise way of getting the same result?

Yes, assuming you accept to drop your string arrays then one is to use bit flags:

```d
enum NumTraitBits
{
    Empty,
    One     = 0x01,
    Two     = 0x02,
    Three   = 0x04,
    // ...
    _      =  0xF0
}

NumTraitBits numeric_traits_1 = NumTraitBits.Empty;
NumTraitBits numeric_traits_2 = NumTraitBits.Two;
NumTraitBits numeric_traits_3 = NumTraitBits.One;
NumTraitBits numeric_traits_4 = NumTraitBits.Two | NumTraitBits.One;

void main() {

    import std.stdio, std.traits;
    void numeric_traits_contains(NumTraitBits numeric) {
        write("contains: ");
        foreach (i; EnumMembers!NumTraitBits)
            if (numeric & i) write(" ", i);
        writeln();
    }

    numeric_traits_contains(numeric_traits_1);
    numeric_traits_contains(numeric_traits_2);
    numeric_traits_contains(numeric_traits_3);
    numeric_traits_contains(numeric_traits_4);
}
```

Reply via email to