map中获取数组_FISH: 使用MAP数组实现loop foreach

267ef16810df533cb20013a0e5cbd498.png

1 引言

在《FISH: Loop语句的进化》一文中,曾经提到使用list.range产生一个列表进行foreach的循环,list.range是3DEC和FLAC3D的内置函数,UDEC没有list.range函数,不太清楚为什么UDEC不加入这个函数。在UDEC中,array产生的是指针,类似于 loop for (n = 1, n <= 10, n = n + 1),不能用于foreach, 因此我们需要另一种产生列表的方法---MAP.

2 MAP数组

Map数组是从Python借用过来的,最早在PFC 5.0中引入(下面演示的代码均在PFC5.0中测试)。MAP数组与Array数组的功能类似,它们都是以一种有序的方式存储FISH变量, 但是比Array数组要灵活得多。Map可以动态调整大小,而且用于从map中检索值的键可以是一个整数或者是一个字符串。Map是一个数据容器,下面的代码演示了对map容器内的数据进行求和,其中键为字符串, 如果某一项的值为字符串,那么这一项的值为0. 

0cab051aef06528ce8619f7b7f7e3cc7.png

此外, 我们也可以对容器内的部分值进行求和,下面的代码显示了这样的意图。在这段代码中,我们仅对第一项和第四项求和。

b5f5a535064df445baf18562768eb101.png

Map数组可以动态地增加,删除以及改变容器中的值。map.add方法增加一个值到map中;map.remove方法从map中删除一个值. 下面的代码演示了这种操作.

48301edf356ffdfe65361a43db04c186.png

map.keys(MAP)获取map容器中的键值,返回值是map中所有键的个数。请注意,在获取具体的键值时,其排列顺序按照字典顺序而不是按照代码中的显示顺序。

c54e79f9a3cbe1c4d9d3303e16eb769f.png

i=map.size(MAP)获取MAP的尺寸,也就是获取map中存有多少对数据(key/value), 返回整形值。map函数总结如下:

e278bcb18dc4712fbbcfdb7e0f725414.png

3 在UDEC中使用map

下面的代码演示了在UDEC中使用map进行循环,其结果与3DEC的计算结果相同。

7cd594f08016b2c31532c7b0017256d9.png

4 在PFC中使用map

Map在UDEC中的应用并不很多, 但在PFC中的应用更广泛一些, 很可能因为map最早是在PFC中引入进来的, 所以发展得更成熟一些.  

fish define replay(name,plot)
rmap = map(0,0)
map.remove(rmap,0)
command
model results map @rmap
endcommand
local rsize = map.size(rmap)
local rkeys = map.keys(rmap)
loop foreach local k rkeys
local iname = map.value(rmap,k)
local oname = string.build('%1_t%2.png',name,k)
command
model result import @iname skip-fish
endcommand
if plot = true
command
plot bitmap plot 'the system' filename @oname
endcommand
endif
endloop
end

本文相关文档:

FISH: Loop语句的进化

与外部数据交互: table命令与table FISH

FLAC3D 7.0 新特性简介(P2)---FISH的显著改进

增加和改进table: table add/insert | table.value

清理Itasca软件的冗余数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值