Comparing Multiple Values
downs
default_357-line at yahoo.de
Tue Mar 11 11:32:01 PDT 2008
Bill Baxter wrote:
> downs wrote:
>> Bill Baxter wrote:
>>> okibi wrote:
>>>> I've looked all over the site but can't seem to find if D supports any
>>>> kind of like IN statement for comparisons. For example, I can do the
>>>> following in SQL:
>>>>
>>>> select *
>>>> from table
>>>> where value in (1,2,3)
>>>>
>>>> And it will compare it to 1, 2, and 3. Is this possible to do within
>>>> D's if statement? I hate to go about it as such:
>>>>
>>>> if (value == 1 || value == 2 || value == 3)
>>>> dosomething();
>>>>
>>>> Just seems like this could be written better. Can anyone give me any
>>>> pointers?
>>> I can point you to a bunch of discussions where certain people argued
>>> tooth and nail that "if(value in [1,2,3])" should mean
>>> "if(value==0||value==1||value==2)", leading basically to a stalemate.
>>> So, no. Nothing like that is in the language.
>>>
>>> But you can write a little "contains" function that will do the trick.
>>>
>>> Or ask Downs how to make "if(x /In/ [1,2,3])" work.
>>>
>>> --bb
>>
>> There's a better way actually.
>>
>> import std.stdio;
>>
>> // bottom-inclusive, top-exclusive, like slices.
>> struct _Range(T) {
>> T from, to;
>> bool opIn_r(U)(U u) {
>> return u < to && u !< from;
>> }
>> }
>>
>> struct Range {
>> static _Range!(T) opSlice(T, U)(T from, U to) {
>> return _Range!(T)(from, to);
>> }
>> }
>>
>> void main() {
>> writefln(3 in Range[2..4], " -- ", 4 in Range[2..4]);
>> }
>>
>> Have funs!
>
> What?! Dost mine eyes deceive me? Downs just gave up an opportunity to
> proselytize about his infix operators?
> This is sure a sign of the end times, my friends.
>
> --bb
Um.
`in` already is an infix operator :)
--downs
More information about the Digitalmars-d-learn
mailing list