【发布时间】:2010-12-06 05:29:55
【问题描述】:
在以下程序中使用哈希计算实际列表的出现后,如何维护实际列表的顺序?例如,<DATA> 是
a
b
e
a
c
d
a
c
d
b
etc.
使用哈希,我计算了每个元素的出现次数。
我想要的是:
a 3
b 2
e 1
c 2
d 2
但下面的程序向我展示了其他方式。
my (%count, $line, @array_1, @array_2);
while ($line = <DATA>) {
$count{$line}++ if ( $line =~ /\S/ );
}
@array_1 = keys(%count);
@array_2 = values(%count);
for(my $i=0; $i<$#array_1; $i++)
{
print "$array_1[$i]\t $array_2[$i]";
}
【问题讨论】:
-
能否请您标记您的代码,以便阅读。
-
@Sinan:不……不是那样……我找不到承认所有精彩答案的地方……只是想知道是通过添加评论完成还是还有其他地方...... stackoverflow 和 perl 的新手......对不起,也许我应该花一些时间来学习如何积极参与这个平台......几乎所有的答案都给了我一个新的想法学习...并服务于我的目的...
-
@Cthar - 您应该选择最适合您的问题的答案(同时考虑到它的写得好和易于理解)并通过单击问题旁边的勾号来接受它。您可以通过投票来赞扬其他好的答案。当然也欢迎积极的 cmets。做这些事情可以帮助其他人找到最好的答案,也可以奖励那些帮助你的人。
-
我为维护订单所做的就是在我的物品前面加上一个数字......例如,如果我有 1000 件物品,第一个可能是 '0001 applesauce',然后是 '0002 aardvarkberries'然后如果我使用实际的条目名称,我知道我必须首先删除 '^\d{4}\s(.+)' 并使用 $1 (假设苹果酱和 aardvarkberries 是我首选的两个哈希键)。我从 Cisco 如何维护其 EEM 脚本顺序中获得了这个想法,并且它对我的目的非常有效。
-
实际上,上述发帖人的想法听起来像是我使用过的另一种技术——我为该哈希条目的顺序保留了一个分配。但是,然后,我需要反复遍历哈希以填充一个有序列表,然后我引用该键本身。维护键名列表还有其他用途,例如当您读取 JSON 式输入文件并希望填充与输入文件相同深度的哈希时(您将拥有动态深度的推送'ed/pop'ed 深度基于指标,比如散列中的括号,告诉你什么时候执行哪个操作)。
标签: perl data-structures hash perl-data-structures