Подтвердить что ты не робот

Динамическая хэш-подобная структура данных в Фортране

Существует ли библиотека, используемая в Fortran, которая позволяет использовать разреженные динамические массивы (хеш-словарь), помимо массивы Judy?

4b9b3361

Ответ 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.