是否可以从数组中计算引用标量的索引?
在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条目)数组,具有相同结构的几何相关数据。
我还有一些基于优先级的队列,其中包含对此数组的引用。处理此队列时,会添加新元素,并且必须使用队列。由于这个队列也会变得相当大。并且元素的优先级发生变化并且是从数组元素及其邻居派生的,我想避免队列中的复杂条目(内存大小和分配性能),并且只有引用它们才能直接访问数组中的信息。
但似乎在任务列表中使用索引是最好的选择。
答案 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。