【发布时间】:2021-05-08 20:15:24
【问题描述】:
我有以下代码:
my @logs = split(",",$opts->{"logs"});
$opt_href->{"logs"} = \@logs;
它基本上用逗号分割$opts->{"logs"} 并保持数组引用。稍后我需要检查$opt_href->{"logs"} 数组中是否存在字符串。查看this topic,我发现建议保留散列,而不是数组。我可以这样做:
my %logs;
for each my $log (split(",",$opts->{"logs"})) {
$logs{$log} = 1;
}
$opt_href->{"logs"} = \%logs;
有没有更好的方法来做到这一点?可能是一个/两个衬垫?
【问题讨论】:
-
Re "我看到建议保留哈希",不完全。建议使用散列来实现集合。您是否尝试从
$opts->{logs}中的值形成一个集合? -
我同意 ikegami 的观点,即完全不确定您是否需要哈希。尤其是手动编辑的选项文件中的字符串。哈希将区分
foo和foo和FOO,而例如正则表达式匹配可以不那么严格。这一切都取决于对您的代码重要的内容。在大多数情况下,检查哈希键与遍历数组是一个小的优化。 -
@TLP 他们说他们“需要检查字符串是否存在......”,这似乎就是他们决定使用哈希的原因,因为它看起来既高效又方便向上结构。那么这确实是一个很好的解决方案,虽然我同意从这个问题中不清楚这是否是组织数据的最佳方式。 (但这不是他们要的,所以没关系)
标签: perl