Comparing Multiple Values
downs
default_357-line at yahoo.de
Tue Mar 11 13:01:34 PDT 2008
Bill Baxter wrote:
> downs wrote:
>> 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
>
> Yes, but it doesn't work!
>
> --bb
Curious.
Works here, GDC 1.028 / 4.1.2
What are you using?
--downs
More information about the Digitalmars-d-learn
mailing list