对于我必须为作业编写的程序。有人告诉我使用智能匹配操作员或哈希。我的问题是,无论我在教科书或互联网上阅读什么,我只是不了解它们的工作方式或做什么。我想没有人真的可以简单地向我解释他们的功能?
作业的最后一部分是推断一个区域中的独特物种数量 - 我已经计算了哪些物种是该地区的,但我不知道如何计算物种的总数。
例如,如果在一个小区域中有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 Kite
,Robin
和Duck
。只需使用一个循环而不是硬编码值以填充哈希,然后使用keys
来计算结果元素的数量,然后您得到了答案。
奖金:我只是在上述中使用了任意价值,因为它足以实现您的目标。但是考虑一下如果您增加元素的值而不是设置元素的值。
++$birds{"Red Kite"};
++$birds{"Red Kite"};
++$birds{"Robin"};
++$birds{"Duck"};
您最终会得到每种物种的鸟数!