计算数组元素引用的索引

时间:2017-03-08 15:17:06

标签: arrays perl reference

是否可以从数组中计算引用标量的索引?

在C中,您可以使用指针算法来检索索引。

SomeType array[500];
const SomeType* e = &array[42];

// [...]

size_t index = e-array;

在Perl中是否有类似的方法?

my @array = (1,2,3,4,5,6,7,8,9,0);
my $e = \$array[4];

# [...]

my $index = '???';

原因:

我有一个相对较大的(> 6Mio条目)数组,具有相同结构的几何相关数据。

我还有一些基于优先级的队列,其中包含对此数组的引用。处理此队列时,会添加新元素,并且必须使用队列。由于这个队列也会变得相当大。并且元素的优先级发生变化并且是从数组元素及其邻居派生的,我想避免队列中的复杂条目(内存大小和分配性能),并且只有引用它们才能直接访问数组中的信息。

但似乎在任务列表中使用索引是最好的选择。

2 个答案:

答案 0 :(得分:0)

List::MoreUtils提供例程:

  • first_index
  • last_index
  • bsearch_index
  • indexes

等。根据具体情况,使用其中一个可能比使用普通的grep

更有效
my @i = grep $array[$_] == $v, 0 .. $#array;

答案 1 :(得分:-1)

$ e包含一个引用,您可以比较引用的相等性。

my @array = (0,0,0,0,0,0,0,0,0,0,0);
my $e = \$array[4];
#..
my $index =$#array;
$index-- while ($e ne \$array[$index] && $index >=0);

print $index;

打印出4。