Nano Hash - криптовалюты, майнинг, программирование

Fortran: обращение к массиву/блоку данных со строковой переменной

Описать мой вопрос непросто, поэтому я сделаю это на примере. Скажем, у меня есть два блока данных и один массив символов (строка):

DATA Foo1/ 0 1 2 3 /
DATA Foo2/ 4 5 6 7 /
CHARACTER*4 FOO

FOO является здесь входом и может содержать одну из двух строк "Foo1" или "Foo2". Я бы очень хотел иметь возможность написать что-то вроде: FOO(2), под которым я подразумеваю: Получите мне второй элемент блока данных, на который ссылается переменная FOO. Например, если FOO="Foo2", то в моем мире фантазий: FOO(2) = 5

Однако FOO — это просто строка, а не имя массива/блока данных.

Есть ли способ сделать это?

14.02.2014

  • я полагаю, вы описываете то, что называется словарем на других языках (например, python). 14.02.2014

Ответы:


1

Может быть вариант указателя:

integer, target, dimension(4) :: Foo1, Foo2
data Foo1/0, 1, 2, 3/
data Foo2/4, 5, 6, 7/
integer, pointer, dimension(:) :: foo_ptr
character(4) foo

...

if (foo.eq.'Foo1') then
  foo_ptr => Foo1
else  ! Perhaps more condition checking
  foo_ptr => Foo2
end if

print*, foo_ptr(2)
14.02.2014

2

Или через пользовательский тип:

program Match

type Foo_type
   character (len=4) :: name
   integer, dimension (1:4) :: values
end type Foo_type

type (Foo_type), dimension (:), allocatable :: Foo

integer :: i, Match_i
character (len=4) :: MatchName

allocate ( Foo (2) )

!  initialize by some means...
Foo (1) % name = "Foo1"
Foo (2) % name = "Foo2"
Foo (1) % values = [ 0, 1, 2, 3 ]
Foo (2) % values = [ 4, 5, 6, 7 ]

write (*, '("Input name: ")', advance="no")
read (*, '(A)' )  MatchName

Match_i = 0
MatchLoop: do i=1, size (Foo)
   if ( Foo (i) % name == MatchName ) then
      Match_i = i
      exit MatchLoop
   end if
end do MatchLoop

!  handle Match_i = 0

write (*, *) Foo (Match_i) % values (2)

end program Match
14.02.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..