Can';t在perl脚本中对哈希进行排序
我似乎无法对哈希进行排序,我在子程序的suboption4循环中使用这个foreach来对哈希进行排序。我正在尝试对它进行排序,以便它只打印用户,从USER1到USER3,而不是PASS1到PASS3。请帮助。在散列中使用带编号的键是个坏主意。如果排序很重要,那么这就是阵列的工作。如果排序不重要,并且您已经命名了键值对,那么这就是散列的工作 哦,在您的情况下-Can';t在perl脚本中对哈希进行排序,perl,sorting,hash,Perl,Sorting,Hash,我似乎无法对哈希进行排序,我在子程序的suboption4循环中使用这个foreach来对哈希进行排序。我正在尝试对它进行排序,以便它只打印用户,从USER1到USER3,而不是PASS1到PASS3。请帮助。在散列中使用带编号的键是个坏主意。如果排序很重要,那么这就是阵列的工作。如果排序不重要,并且您已经命名了键值对,那么这就是散列的工作 哦,在您的情况下-%userAndPass与$userAndPass无关使用严格使用警告会告诉你这件事的 我建议您的数据结构会更好,因为: sub hash
%userAndPass
与$userAndPass
无关<代码>使用严格代码>使用警告
会告诉你这件事的
我建议您的数据结构会更好,因为:
sub hashOfUsers
{
%userAndPass = (); #hash to store the user and passwd, SORT hashes to view the users of this program
$userAndPass = {
USER1 => 'David',
PASS1 => 'P@ssw0rd',
USER2 => 'Paul',
PASS2 => 'P@ssw0rd',
USER3 => 'Diana',
PASS3 => 'P@ssw0rd'
}; #users and pass hashes
}
sub option4
{
&hashOfUsers();
foreach $hi(sort {$userAndPass{$a} cmp $userAndPass{$b}} keys %userAndPass)
{
print "The users of this programs are: $userAndPass{$hi} $hi \n";
}
}
因为这样你就可以:
my @users = (
{ USER => 'David',
PASS => 'P@ssw0rd',
},
{ USER => 'Paul',
PASS => 'P@ssw0rd',
},
{ USER => 'Diana',
PASS => 'P@ssw0rd'
}
);
问题是:
首先,将结构初始化为散列的标量引用,但sort
语句希望使用(当前未初始化的)散列
就这么做吧
如果你要:
use strict;
use warnings;
foreach
语句中的sort
函数将生成以下列表的一些变体:
USER1
USER3
键(它们的关联值都相同)按随机顺序传递*
USER2
如果结构的当前代码嗅觉版本对您很重要,请考虑用<代码> > GRP{/^用户/}键%%Urand Pase< /Cult> < /P>替换<代码> %Usand and <代码>,这不会产生您声称的输出。具体来说,它不产生任何输出。从添加
使用strict开始;使用警告qw(全部)代码>--始终使用这些!!!--并解决他们发现的问题。结构$userAndPass
是给你的还是你自己编的?我建议使用一种更好的结构来存储用户名和密码……这正是我心目中的结构。然后可以这样进行排序:foreach my$entry(sort{$a->{USER}cmp$b->{USER}}@users){print“USER:$entry->{USER};pwd:$entry->{PASS}\n”;}
。
use strict;
use warnings;
%userAndPass = (
USER1 => 'David',
PASS1 => 'P@ssw0rd',
USER2 => 'Paul',
PASS2 => 'P@ssw0rd',
USER3 => 'Diana',
PASS3 => 'P@ssw0rd'
);
@UserAndPass = (
{USER => 'David', PASS => 'P@ssw0rd'},
{USER => 'Paul', PASS => 'P@ssw0rd'},
{USER => 'Diana', PASS => 'P@ssw0rd'},
);
%UserAndPass = (
'David' => 'P@ssw0rd',
'Paul' => 'P@ssw0rd',
'Diana' => 'P@ssw0rd',
)