在Perl中交换两个数组值的最有效方法

前端之家收集整理的这篇文章主要介绍了在Perl中交换两个数组值的最有效方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很好奇在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;
}

猜你在找的Perl相关文章