Arrays 计算数组元素引用的索引

Arrays 计算数组元素引用的索引,arrays,perl,reference,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条

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

在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条目)数组,其中包含结构相同的几何相关数据

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

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

提供了如下例程:

  • 第一个索引
  • last\u索引
  • b搜索索引
  • 索引
等等。根据具体情况,使用其中一种可能比仅使用普通的旧
grep
更有效:

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

$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。

这听起来像是XY问题。你能更详细地解释一下你想做什么吗?通常,将C“直接翻译”成Perl是个坏主意。@ThisSuitesBlack这不是一个直接翻译,但我认为这将有助于描述我想要的东西。解决我的问题的一种可能性是保留(索引,值)-对象,但我认为使用引用会更好,因为保存这些对象的列表将经常被修改(插入,排序,删除),并且会变得相当大,源
数组
这里的问题是为什么需要这样做。将数组中的某些内容分配给单独的标量之后,为什么需要知道索引?如果你想做这样的事情,你可能需要一个散列。同样,你需要澄清你想要做的事情的目的。为什么不使用这样一个功能来滚动你自己的类型呢?(你甚至可以
把它绑起来,这样
=
就像你想要的那样。)你想要的是非常非常具体的。即使有可能直接这样做,但是使用一个简单的小类可能会更清楚。在数组中搜索是没有选择的。因为性能非常重要,而且阵列非常大。我在寻找一种计算指数的方法。类似于C。Perl不是C。。。引用不是指针。另外,如果您还不知道C中某个特定元素的指针,那么如何获取该元素的指针?