Re: Succinct way of testing array membership [message #81289 is a reply to message #81207] |
Fri, 31 August 2012 10:26   |
Michael Galloy
Messages: 1114 Registered: April 2006
|
Senior Member |
|
|
On 8/30/12 3:12 PM, Helder wrote:
> On Thursday, August 30, 2012 7:09:35 PM UTC+2, Mike Galloy wrote:
>> On 8/30/12 10:51 AM, godber wrote:
>>
>>> Is there a more succinct way of testing array membership than using where and n_elements on the indexes? Something like array_contains(a, 'pancakes')?
>>
>>>
>>
>>> Austin
>>
>>>
>>
>>
>>
>> In general, how about:
>>
>>
>>
>> print, where(a eq 'pancakes', /null) ? 'found' : 'not found'
>>
>>
>>
>> Mike
>>
>> --
>>
>> Michael Galloy
>>
>> www.michaelgalloy.com
>>
>> Modern IDL: A Guide to IDL Programming (http://modernidl.idldev.com)
>>
>> Research Mathematician
>>
>> Tech-X Corporation
>
> Hi Mike,
> I never noticed the presence of the /null keyword. Nice tip.
> However, the version you provided will not work (at least not on my pc...).
> How about:
> print, (where(a EQ 'pancakes', /null) NE !NULL) ? 'found' : 'not found'
> or
> print, ((where(a EQ 'pancakes'))[0] GE 0) ? 'found' : 'not found'
>
> Not as clean, but still doing the job.
>
> Cheers,
> Helder
>
I like Wayne's approach using ARRAY_EQUAL. I was trying to get too cute
and eliminating the comparison to !null, try:
IDL> a = ['cakes', 'pies']
IDL> print, where(a eq 'cakes', /null) ne !null ? 'found' : 'not found'
found
IDL> print, where(a eq 'pancakes', /null) ne !null ? 'found' : 'not found'
not found
Mike
--
Michael Galloy
www.michaelgalloy.com
Modern IDL: A Guide to IDL Programming (http://modernidl.idldev.com)
Research Mathematician
Tech-X Corporation
|
|
|