블라디미르 F의 대답은 중요한 부분을 알려줍니다. (i,j)
은 복잡한 리터럴 상수 인 i
이고 j
은 상수 여야합니다. 명시된 바와 같이, 고유 한 복합 함수 cmplx
이보다 일반적인 경우에 사용될 수 있습니다.
다양성과 옵션을 제공하기 위해 복잡한 배열의 다른 측면을 살펴 보겠습니다. 다음 예제에서는 출력 문을 무시하고 주어진 선언을 가정합니다.
우리가, 다음, 블라디미르 F의 보정 :
그 꼭대기에
do i=1,3
indx(i,:) = CMPLX(i,[(j,j=1,3)])
end do
, 우리가 고려할 수 :
do i=1,3
do j=1,3
indx(i,j) = CMPLX(i,j) ! Note that this isn't in array element order
end do
end do
우리는 cmplx
는 원소 기능이라고하지만,주의 수
indx = RESHAPE(CMPLX([((i,i=1,3),j=1,3)],[((j,i=1,3),j=1,3)]),[3,3])
여기서,이 시간 t 오른쪽은 indx
에 대한 배열 요소 순서입니다.
글쎄,이 마지막 (또는 심지어 두 번째)이 원래 루프보다 좋다고 말할 수는 없지만 선택 사항입니다. 어떤 경우에는 더 우아 할 수 있습니다.
하지만 다른 옵션이 있습니다. 하나의 복잡한 부분 지정자에 대한 컴파일러 지원이있는 경우 우리는 첫 번째 형태에 대한 대안이 :
do i=1,3
do j=1,3
indx(i,j)%re = i
indx(i,j)%im = j
end do
end do
이 정말 우리에게 아무것도 제공하지 않습니다,하지만 우리가 배열의 복잡한 부분을 가질 수 있습니다 :
을
do i=1,3
indx(i,:)%re = [(i,j=1,3)]
indx(i,:)%im = [(j,j=1,3)]
end do
또는
do i=1,3
indx(i,:)%re = i ! Using scalar to array assignment
indx(i,:)%im = [(j,j=1,3)]
end do
그리고 우리는
indx%re = RESHAPE([((i,i=1,3),j=1,3))],[3,3])
indx%im = RESHAPE([((j,i=1,3),j=1,3))],[3,3])
모든 길을 갈 수있다
다시 말하지만,이 모든 것은 다양성 또는 다른 애플리케이션의 이름입니다. 심지어 이들 중 일부는 spread
입니다. 그러나 코드를 검토하는 사람이 싫어서는 안됩니다.
1constants not constant expresssions 있다고.