Fortran 90/95中能否用A(-1)取数组最后元素?替代A(N)的方法
Fortran 90/95 获取数组最后一个元素的方法
嗨,刚好对Fortran的数组索引这块熟得很——在Fortran 90/95里,没法直接像Python那样用A(-1)获取数组最后一个元素。原因很简单:Fortran的数组索引范围是完全自定义的,你可以声明成默认的integer :: A(5)(索引1到5),也可以搞成integer :: A(-3:2)(索引从-3到2),这时候A(-1)只是数组里的中间元素,跟“最后一个”完全不沾边。
那除了直接写死最后一个索引值N用A(N)之外,还有这些更灵活的方法:
使用
size()函数:size(A)会返回数组的总元素数,对于一维数组,直接用A(size(A))就能拿到最后一个元素。示例代码:integer :: A(5) = [1,2,3,4,5] print *, A(size(A)) ! 输出5如果是多维数组,记得指定维度参数,比如二维数组
A(3,4),要取第二维的最后一列元素,就写A(:, size(A,2))。使用
ubound()函数:这个函数返回数组指定维度的上界(也就是该维度的最大索引值),比size()更精准,尤其适合那些不是从1开始索引的数组。示例:integer :: A(-2:3) = [10,20,30,40,50,60] print *, A(ubound(A,1)) ! 输出60,因为这个数组的第一维上界是3多维数组的话,比如
A(-1:2, 0:5),要取第一维最后一个、第二维最后一个的元素,就写A(ubound(A,1), ubound(A,2))。自定义封装函数(进阶玩法):如果你经常需要取最后一个元素,可以写个小函数封装起来,用起来更顺手:
function last_element(arr) result(res) integer, intent(in) :: arr(:) integer :: res res = arr(ubound(arr,1)) end function last_element ! 调用示例 integer :: A(5) = [1,2,3,4,5] print *, last_element(A) ! 输出5这个版本只支持一维数组,要是需要支持多维,可以给函数加个维度参数扩展一下。
内容的提问来源于stack exchange,提问作者Manu Gupta
相关产品推荐
相关产品推荐

