在FOREACH 中使用 HASH
原文链接:https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/using-a-hash-with-foreach
18805 文章评分:
5.0
在 FOREACH 中使用 HASH
匿名 2015年10月13日,星期二
FOREACH 循环是 IDL 中一个方便的工具,允许用户遍历数组中的每个元素,而无需确定其大小。启动循环的语法是:
foreach 元素, 变量, 索引 do
第一个参数“元素”不需要预先定义,它是保存当前迭代循环元素的变量。第二个参数是包含要遍历的数组、列表或哈希的 IDL 变量。第三个参数“索引”是可选的,包含当前循环的索引。当使用列表或数组时,这第三个参数是跟踪当前迭代的好方法。
然而,对于 HASH,第三个可选参数将是当前键/值对的键,而第一个参数“元素”将是值。这对于诸如为图形添加标题之类的事情很有用,因为键可以是字符串。下面的示例说明了如何做到这一点。
x = findgen(21)/10 - 1.0
i = 1
data = orderedhash()
data['linear'] = x
data['squared'] = x^2
data['cubed'] = x^3
p = list()
foreach this_data, data, type do begin
p.add, plot(x, this_data, LAYOUT=[3,1,i], TITLE=type, THICK=3, /current)
i++
endforeach
(p[0]).COLOR= 'red'
(p[1]).COLOR= 'green'
(p[2]).COLOR= 'blue'
生成的图形如下所示:

在这个例子中需要注意几点:
首先,由于第三个可选参数是 HASH 的键,如果需要循环的数字索引,则必须通过在循环中递增一个值(我使用了“i”)来手动处理。
其次,使用 ORDEREDHASH 很重要。没有它,绘图的顺序不一定符合预期。当我使用常规 HASH 运行此程序时,生成的图形是左侧为“平方”,中间为“线性”,右侧为“立方”。
最后,我使用了一个列表来保存 plot 函数返回的对象,这使我能够在图形初始化后更改绘图的颜色。LIST::ADD 方法将绘图逐个添加到列表中。