gpt4 book ai didi

arrays - 获取 Perl 数组中两个值之间的所有元素的最有效方法

转载 作者:行者123 更新时间:2023-12-02 08:37:20 26 4
gpt4 key购买 nike

我有一个整数值列表;这些整数值中的每一个都与一个实际值相关联。

给你一个想法,他们可能是这样表示的:

1    0.48
5 0.56
6 0.12
20 1.65
25 1.50

并非所有整数都出现在列表中,只有那些具有与之关联的值的整数。

给定一个整数值范围,我必须对与范围两端之间的任何整数关联的实数值执行一些操作。例如:

给定范围 5-20,我需要提取与整数 5、6 和 20 关联的实数值,然后对它们执行一些操作。

现在我能想到的最好办法是使用整数值作为散列的键并遍历所有排序的整数值并检查每个值是否在范围内;像这样:

foreach (sort key %hash) 
{
if ($_ >= $rangemin && $_ <= $rangemax)
{
push @somearray, $hash{$_}
}
last if $_ >= $rangemax;
}

然而,我正在处理的真实列表要长得多,而且这个实现需要很多时间来执行。

是否有更快/更有效的方法来获取位于数组中两个任意值之间的值列表?

最佳答案

不要排序,没必要。

这可能会稍微快一些:

@somearray = @hash{ grep $_ >= $rangemin && $_ <= $rangemax, keys %hash };

(通过使用 grep 过滤所有键来构建所需索引的列表,然后使用哈希切片一次获取所有值)。

您必须对其进行基准测试才能确定。

另一种方法是从 $rangemin 循环到 $rangemax:

for ($rangemin..$rangemax) {
push @somearray, $hash{$_} if exists $hash{$_};
}

for ($rangemin..$rangemax) {
push @somearray, $hash{$_} // ();
}

@somearray = @hash{ grep exists $hash{$_}, $rangemin..$rangemax };

哪个最快将在很大程度上取决于数据的稀疏性和范围的大小以及您包含的哈希值的百分比。

关于arrays - 获取 Perl 数组中两个值之间的所有元素的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com