Существует ли библиотека, используемая в Fortran, которая позволяет использовать разреженные динамические массивы (хеш-словарь), помимо массивы Judy?
Динамическая хэш-подобная структура данных в Фортране
Ответ 1
Не видел один встроенный, но google возвращает несколько:
FLibs: http://flibs.sourceforge.net/
Таблицы Hash: http://burtleburtle.net/bob/hash/evahash.html и http://www.cris.com/~Ttwang/tech/inthash.htm.
Ответ 2
Я создал абстрактный словарь в 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.