【发布时间】:2017-03-23 23:13:18
【问题描述】:
程序将一个非常大的字典式 TXT 文件读入散列。有时,键的小写版本更可取。我下面的解决方案很笨拙,因为即使我们已经知道 lc 版本存在,它也会搜索两次:
if ( exists $hash{ lc $key } ) {
$key = lc $key;
}
if ( exists $hash{ $key } ) {
# lot of code involving $key
}
else {
# the key doesn't exist, other code
}
有没有办法避免两次exists 测试?如果lc $key 存在,我想对它执行与第二个if 相同的代码,但我需要知道$key 使用哪个版本,lc 与否。我希望将其压缩为一对if-else。
知道有效密钥的大小写对于程序的其余部分很重要,因为它用于在另一个哈希中查找信息。
【问题讨论】:
-
这是否意味着您可以同时将
foo和FOO作为同一哈希中的键? -
是的。这是名称和单词的散列。有些名字也是词。因此,如果用户提供“John”并且“john”也存在,那么“john”就是我所追求的。然后,我使用“john”搜索另一个哈希的值,并提供与“john”关联但不与“John”关联的该哈希的所有键。
-
在将键读入搜索索引时对其进行标准化,但这可能不值得。与较大的费用相比,两次哈希查找并不昂贵。或者把文件放到SQLite中,使用SQL(这样可以解决很多问题)。
-
Hash1 有:John - WORD1,john - WORD2。 Hash1 中的每个键都作为 Hash2 中的值存在。翻译 1 - 约翰,翻译 2 - 约翰,翻译 3 - 约翰。但我只挑选“约翰”的翻译,而不是“约翰”的翻译。因此需要保留大小写。我希望能更好地解释它!我不知道哈希查找不受哈希大小的影响,所以也许我的问题毕竟不是问题:)
-
重新打开。 OP 不希望使用不区分大小写的键的哈希。