Fortran中是否有可用的库,允许使用除Judy arrays之外的稀疏动态数组(哈希/字典)?
答案 0 :(得分:5)
没有看到一个内置,但google返回一些:
FLibs:http://flibs.sourceforge.net/
哈希表:http://burtleburtle.net/bob/hash/evahash.html和http://www.cris.com/~Ttwang/tech/inthash.htm。
答案 1 :(得分:4)
我在fortran中创建了一个抽象字典,可能符合您的需求。
请参阅:https://github.com/zerothi/fdict
基本上它可以让你做到
type(dict) :: dic, dic2
dic = ('KEY'.kv.1)
dic = dic //('next'.kv. (/3.,5.,6./))
dic = dic //('string'.kv.'Hello world')
dic2 = ('string2'.kv.'Test')
dic = dic // ('dic2'.kvp.dic2)
在可以保存所有内部类型并且可以轻松扩展以包含其他数据类型的位置,默认情况下最初将自身包含为另一个值。 (最后一行将字典保留为指针)
它是.kv. == key : value
指定的深拷贝,和
.kvp. == key : pointer
这是一个参考副本。
通过这种方式,您可以存储大量数据,而无需重复数据并在稍后检索指针。
为了详细说明这个想法,所有数据都使用来自包含数据指针的派生类型的transfer
调用存储为地址指针。通过这种方式,您可以欺骗编译器向您发送fortran派生类型的地址,但强制您以完全相同的方式检索它。
通过.kv.
分配数据类型的指针并随后由数据容器指向,然后分配的指针为nullify
并且丢失从而强制用户知道他们在做什么(里面没有垃圾收集器;))。
通过.kvp.
直接保存指针而不复制任何内存。
好消息是它符合fortran90。