【发布时间】:2016-02-18 02:21:38
【问题描述】:
我正在使用哈希来缩写州名
%STATEABBRIVATE = ('ALABAMA' => 'AL',
...);
我的一些输入集已经有缩写的州名。使用if defined $STATEABBRIVATE{$state} 还是将另外51 个匹配对'AL'=>'AL' 添加到哈希中会更有效吗?
【问题讨论】:
-
如果你想验证状态是否真的存在,使用
AL => 'AL'可能是最简单的方法。 -
$state = $STATEABBRIVATE{$state} if length($state) > 2 -
如果问题是关于性能的,答案是:没关系。 (任何差异都可以忽略不计/不明显。)
-
当然,您可以通过不基于某些条件(例如字符串长度 == 2)进行映射来节省几个周期。但是对所有值进行映射允许验证。由于散列长度是有限的(100 个值),查找将非常有效。不验证输入以避免查找哈希键对我来说似乎是过早的优化。
-
“过早的优化是万恶之源”。不要投机优化。编写清楚它在做什么的代码。如果需要优化,请运行分析器。很有可能,不会有 - 现在计算机速度非常快,因此对于大多数数据集,您不会节省大量时间。 (如果有的话,一旦你优化了它,然后在 6 个月的时间里实现你就不再理解它了)
标签: performance perl hash