Fortran中的动态哈希数据结构

har*_*dkl 10 fortran data-structures

Fortran中是否有可用的库,它允许使用除Judy数组之外的稀疏动态数组(哈希/字典)?

SOU*_*ser 5

还没有看到一个内置,但谷歌返回一些:

FLibs:http://flibs.sourceforge.net/

哈希表:http://burtleburtle.net/bob/hash/evahash.htmlhttp://www.cris.com/~Ttwang/tech/inthash.htm.


zer*_*oth 5

我在 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)
Run Code Online (Sandbox Code Playgroud)

在可以保存所有内部类型并且可以轻松扩展以包含其他数据类型的地方,它默认最初将自身包含为另一个值。(最后一行保留了一个字典作为指针)

.kv. == key : value指定哪个是深拷贝, .kvp. == key : pointer哪个是参考拷贝。通过这种方式,您可以存储大量数据,而无需复制数据并在稍后检索指针。

为了详细说明这个想法,使用transfer来自包含数据指针的派生类型的调用将所有数据存储为地址指针。通过这种方式,您可以欺骗编译器将 fortran 派生类型的地址交给您,但强制您以完全相同的方式检索它。
通过.kv.分配数据类型的指针并随后由数据容器指向,然后分配的指针被nullifyied 并丢失,从而迫使用户知道他们在做什么(其中没有垃圾收集器;) )。通过.kvp.指针直接保存,无需复制任何内存。

好消息是它符合 fortran90。