Andrew Truckle
Andrew Truckle

Reputation: 19157

Can the else clause be simplified in this if\else ladder?

I have thiselse clause:

else if (iItemIndex == 1 || iItemIndex == 3 || iItemIndex== 5 || iItemIndex == 7 ||
    iItemIndex == 10 || iItemIndex == 12 || iItemIndex == 14 || iItemIndex == 16 ||
    iItemIndex == 19 || iItemIndex == 21 || iItemIndex == 23 || iItemIndex == 25)

Can it be simplified in some way? Nothing wrong with the code. Just curious if there is a less verbose way of doing the test. In context I have:

if(iItemIndex == 0 || iItemIndex == 9 || iItemIndex == 18)
{
    // Do something
}
else if (iItemIndex == 1 || iItemIndex == 3 || iItemIndex== 5 || iItemIndex == 7 ||
    iItemIndex == 10 || iItemIndex == 12 || iItemIndex == 14 || iItemIndex == 16 ||
    iItemIndex == 19 || iItemIndex == 21 || iItemIndex == 23 || iItemIndex == 25)
{
    // Do something else
}
else
{
    // Do something else
}

Upvotes: 0

Views: 53

Answers (1)

Davis Herring
Davis Herring

Reputation: 39953

You can write

const bool rng=i>=0 && i<27;
if(const auto r=i%9; rng && !r) …
else if(rng && (r&1)) …
else …

This can of course be much simplified if the value may be assumed to be in the relevant range:

if(const auto r=i%9; !r) …
else if(r&1) …
else …

Upvotes: 1

Related Questions