如何最好地实现与Matlab的相交函数等效的Fortran

时间:2019-11-21 22:41:27

标签: matlab fortran

令我惊讶的是,这里没有内在的例程,但是我需要一个代码片段,该片段应采用两个预先排序的1D整数数组,并以有效的方式返回两个数组中都存在的元素。

integer, allocatable :: A (:), B(:), C(:)
A=[1,2,3,6,10]
B=[3,10,5]

C=intersect(A,B) !< returns [3,10]

在Fortran中实现此功能的最佳方法是什么,或者我可以看一个好的开源实现?我也无法在数字食谱或Rosetta代码中找到它。

2 个答案:

答案 0 :(得分:1)

使用set data structure,或者对两者进行排序,或者对最短的字符进行排序,然后对另一个元素进行二进制搜索。

另请参阅Arjen Markus的FLIB

答案 1 :(得分:1)

pack(a, [(any(b == a(i)), i=1, size(a))])