Как проверить, содержит ли массив Fortran значение? - PullRequest
29 голосов
/ 01 декабря 2011

Я видел, как это просили для других языков, но только что узнал, насколько хорошо Fortran может работать с массивами, я подумал, что может быть простой способ сделать это без циклов.

В настоящее время я ищу в трехмерном массиве, ища «ближайших соседей», чтобы увидеть, содержат ли они букву «n», и всякий раз, когда он находит это значение, я хочу, чтобы он выполнил некоторое назначение clusterLabel (которое не имеет значения на этот вопрос)

Я хотел использовать if(lastNeighArray.eq."n") then...<rest of code> но по понятным причинам он не любит проверять массив по значению. Мне тоже не нравится использовать lastNeighArray(:), хотя я бы хотел проверять каждый элемент по одному. where(lastNeighArray.eq."n") не работает, так как у меня есть инструкция case внутри цикла where, и я получаю ошибку WHERE statements and constructs must not be nested.

Так что я немного застрял. Я действительно хочу что-то вроде when(lastNeighArray.eq."n"), но этого не существует.

Я также смотрел на any и forall, но они не кажутся правильным выбором.

1 Ответ

45 голосов
/ 01 декабря 2011

ЛЮБОЙ на самом деле должен быть правильный выбор

if ( ANY( lastNeighArray=="n" ) ) then

также имеется значение ALL, если вы хотите, чтобы весь массив содержал это значение.

...