在Fortran中,如何从数组中删除第N个元素?

2 arrays fortran matrix intel-fortran

例如我有数组(/ 1,3,4,5,7,9,11 /),如何删除它的第3个元素?我找不到这确实是一个阵列的功能,也没有我发现一个循环的优雅的解决方案,因为我不知道如何追加到一个数组(这意味着,新增一个元素前面定义的元素旁边.)

我想从数组中删除所有偶数元素......我知道只有一个元素.

我可以使用MINLOC找到它的索引,但我不知道如何从数组中删除一个元素.

Hig*_*ark 6

a = (/1,3,4,5,7,9,11/)
Run Code Online (Sandbox Code Playgroud)

然后

pack(a,mod(a,2)/=0)
Run Code Online (Sandbox Code Playgroud)

将返回奇数元素a.这与删除第3个元素并不完全相同,但您的问题表明删除偶数元素确实是您想要做的.

如果你宣布

integer, dimension(:), allocatable :: oddones
Run Code Online (Sandbox Code Playgroud)

然后

oddones = pack(a,mod(a,2)/=0)
Run Code Online (Sandbox Code Playgroud)

将离开oddones包含奇怪的元素a.您需要一个最新的编译器才能使用此自动分配.

请注意,在Fortran中,与任何理智的语言一样,数组具有固定大小,因此实际上不支持删除元素.但是,如果a它本身就allocatable可以使用表达式alhs.让我们留给哲学家,无论a在这个操作下是否保持不变.