我想在Perl中代表一个集合.我通常做的是使用带有一些虚拟值的哈希,例如:
my %hash=();
$hash{"element1"}=1;
$hash{"element5"}=1;
Run Code Online (Sandbox Code Playgroud)
然后使用if (defined $hash{$element_name})
来确定元素是否在集合中.
这是一种常见做法吗?有关改进的建议吗?
另外,我应该使用defined
或exists
?
谢谢
我有一个十六进制数字数组,我需要查看其他数字并检查它们是否出现在该数组中.现在我正在使用一个foreach
遍历整个阵列的循环.有没有办法通过首先对数组进行排序,然后在其上实现二进制搜索来加快速度.
目前的代码:
sub is_bad_str{
my ($str, @keys) = @_;
my $flag = 0;
my ($key, $hex_num);
if ($str =~ m/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/;){ #'# fixes bad highlighting
$hex_num = $1;
}
if (defined $hex_num){
foreach $key (@keys){
if ($hex_num =~ /\Q$key\E/i){
$flag = 1;
last;
}
}
}
if (($flag == 0) && (defined $hex_num)){
return 1;#Bad str
}else{
return 0;#Good str
}
}
Run Code Online (Sandbox Code Playgroud)