我很好奇在Perl中交换数组中两个元素的最有效方法是什么.
假设我想分别用3和5的索引切换元素,那么最快的方法是什么?
我的想法是这样的:
@array[3,5] = @array[5,3];
这非常有效吗?我希望如果这两个数组值包含大量数据,那就不会有什么不同.我希望后端能够改变指针,而不进行任何实际的复制.那是对的吗?
解决方法
你是什么意思“大量的数据”?如果您指的是对大型数据结构的引用,那么您的工作方式并不重要;它会很快疯狂. (每次交换不到一纳秒.)所以我假设你的意思是“大字符串”.
您发布的代码将复制字符串.您可以使用Data::Alias避免这种情况.
use Data::Alias; alias @array[3,3];
或者如果你想避免Data :: Alias的语法魔法,你可以用一点XS做同样的事情:
void swap_array_elements(AV * av,IV ix1,IV ix2) { SV ** p_ele1 = av_fetch(av,ix1,1); SV ** p_ele2 = av_fetch(av,ix2,1); SV * sv = *p_ele1; *p_ele1 = *p_ele2; *p_ele2 = sv; }