1

我对 IDL 很陌生。

实际上,我想要做的是有一个 if 语句来检查当前索引 I 是否在数组中。

在 Python 中,它看起来像下面这样:

if this_num in xartifact:
   print 'Is an x artifact'
elif this_num in yartifact:
   print 'Is a y artifact'
else:
   print 'Is neither'

我知道你可以在 IDL 中嵌套 if:

IF P1 THEN S1 ELSE $

IF P2 THEN S2 ELSE $

IF PN THEN SN ELSE SX

我只是不知道是否有 in 运算符或理智的方式来执行此操作。

干杯

4

3 回答 3

3

我将使用与上述示例类似的count参数:WHERE

a = 2
b = [1, 2, 3, 5]
ind = where(a eq b, count)
print, count gt 0 ? 'a in b' : 'a not in b'
于 2013-06-07T20:56:21.107 回答
1

IDL 可能会因 if 语句而有点过度使用。正如您所说,基本的“if then else if then”语句可能类似于:

if a eq 0 then print, 'the variable a equals 0' else $
if a eq 1 then print, 'the variable a equals 1' $
else print, 'the variable is something else'

对于 if 语句中的多行,您可以使用以下内容,而不是使用 $ 来继续该行:

if a eq 0 then begin
  print, 'the variable a equals 0'
  print, 'more stuff on this line'
endif else if a eq 1 then begin
  print, 'the variable a equals 1'
  print, 'another line'
endif else begin
  print, 'a is something else'
  print, 'yet another line'
endelse

最后,评估变量是否在向量中取决于您想要做什么以及数组中的内容,但一种选择是使用 where 函数。一个例子来展示它是如何工作的:

a=2
b=[1,2,2,3]
result = where(a eq b)
print, result
if result[0] ne -1 then print, 'a is in b' $
else print, 'a is not in b'

可能还有更好的方法来做到这一点。也许是一个案例陈述。

于 2013-06-06T22:01:54.463 回答
0

@mgalloy 提供的答案肯定有效,但是有一个更简单的解决方案,它利用了整个过程并且只涉及一行代码。

a = 2
b = [1, 2, 3, 5]

if total(b eq a) eq 1 then print, 'Yes' else print, 'No'
于 2020-10-08T02:57:33.067 回答