gpt4 book ai didi

arrays - 检查一个数组是否包含另一个数组中的值

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

我有一个对象数组,以及特定方法的可接受返回值的数组。如何将对象数组减少为仅那些相关方法返回可接受值数组中的值的对象?

现在,我有这个:

my @allowed = grep {
my $object = $_;
my $returned = $object->method;
grep {
my $value = $_;
$value eq $returned;
} @acceptableValues;
} @objects;

问题是这是一个复合循环,我想避免它。该程序旨在扩展到任意大小,并且我希望最大限度地减少运行的迭代次数。

最好的方法是什么?

最佳答案

您可以将接受的返回值转换为哈希

my %values = map { $_ => 1 } @acceptedValues;

grep ,条件是 key 存在而不是您的原始 grep:

my @allowed = grep $values{ $_->method }, @objects;

无论如何,grep 本身相当快,这只是一个想法检查元素是否在数组中的常见方法。尽量不要优化不需要的东西,因为它只有在非常大的情况下才有值(value)数组。然后您可以对接受的结果数组进行排序并使用二分搜索,或者缓存重复的结果。但再说一遍,不要除非您要处理数百个,否则不必担心这种优化数千个项目 - 或更多。

关于arrays - 检查一个数组是否包含另一个数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43700925/

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