令我惊讶的是,这里没有内在的例程,但是我需要一个代码片段,该片段应采用两个预先排序的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代码中找到它。
答案 0 :(得分:1)
使用set data structure,或者对两者进行排序,或者对最短的字符进行排序,然后对另一个元素进行二进制搜索。
另请参阅Arjen Markus的FLIB。
答案 1 :(得分:1)
pack(a, [(any(b == a(i)), i=1, size(a))])