佩尔中的哈希和智能匹配操作员



对于我必须为作业编写的程序。有人告诉我使用智能匹配操作员或哈希。我的问题是,无论我在教科书或互联网上阅读什么,我只是不了解它们的工作方式或做什么。我想没有人真的可以简单地向我解释他们的功能?

作业的最后一部分是推断一个区域中的独特物种数量 - 我已经计算了哪些物种是该地区的,但我不知道如何计算物种的总数。

例如,如果在一个小区域中有4只鸟:

2 Red Kite
1 Robin 
1 Duck

我知道总共有4只鸟,但我不知道该特定地区有3种物种。

我建议您使用哈希,这是一个数据结构,您可以使用 string

访问它

您可以将哈希相与数组进行比较。

数组的每个元素都有 index 和a value ,因此@data的元素对于索引2的值是$data[2]。同样,哈希的每个元素都有a 和a value ,因此%bird_count对于密钥Red Kite的元素的值是$bird_count{'Red Kite'}。(请注意使用括号而不是支架来访问哈希元素。)

可以使用整数访问诸如@data之类的数组,因此第三个元素是$data[2],可以使用字符串访问%bird_counts之类的哈希,因此红色风筝的计数为$bird_count{'Red Kite'}

如果您的程序计算出观察到的鸟类,则可以做

++$bird_count{'Red Kite'};
++$bird_count{'Robin'};
++$bird_count{'Red Kite'};
++$bird_count{'Duck'};

哈希具有三个元素: $bird_count{'Red Kite'}2,另外两个为 1。尝试。

您可以通过计算哈希的来计算不同鸟的数量,因此

my $num_different_birds = keys %bird_count;

我希望有帮助。

好吧,智能匹配是实验性的,可能会更改,因此我不会使用它。(很明显,智能赛几乎可以肯定会在将来改变或消失。不建议依靠其当前行为。))

a哈希是哈希表的实现,这是一种数据结构,旨在快速查找由字符串键起的元素。将其视为带有索引的字符串而不是整数的数组。

哈希的另一个功能是,您可以列举内部元素的键(在列表上下文中使用keys),并且可以计算它们(在标量上下文中使用keys)。这对于分组项目可能很有用。执行以下内容后,请考虑存在哪些元素:

$birds{"Red Kite"} = 1;
$birds{"Red Kite"} = 1;
$birds{"Robin"}    = 1;
$birds{"Duck"}     = 1;

您最终得到了三个元素,其键为Red KiteRobinDuck。只需使用一个循环而不是硬编码值以填充哈希,然后使用keys来计算结果元素的数量,然后您得到了答案。


奖金:我只是在上述中使用了任意价值,因为它足以实现您的目标。但是考虑一下如果您增加元素的值而不是设置元素的值。

++$birds{"Red Kite"};
++$birds{"Red Kite"};
++$birds{"Robin"};
++$birds{"Duck"};

您最终会得到每种物种的鸟数!

最新更新