Perl 按顺序遍历散列
我想逐个遍历散列。不是随机的。任何想法。例如,我有这样的散列文件Perl 按顺序遍历散列,perl,hash,Perl,Hash,我想逐个遍历散列。不是随机的。任何想法。例如,我有这样的散列文件 our %HASH = ( 'rajesh:1700' => Bangalore, 'rajesh:1730' => Delhi, 'rajesh:1770' => Ranchi, 'rajesh:1780' => Mumbai, 'rajesh:1800' => MYCITY, 'rajesh:1810' => XCF, ); 它应该以同样的方式打印。我试着跟随,但失
our %HASH = (
'rajesh:1700' => Bangalore,
'rajesh:1730' => Delhi,
'rajesh:1770' => Ranchi,
'rajesh:1780' => Mumbai,
'rajesh:1800' => MYCITY,
'rajesh:1810' => XCF,
);
它应该以同样的方式打印。我试着跟随,但失败了。有什么想法吗
while ( my $gPort = each %HASH)
{
print "$gPort\n";
}
for my $gPort ( keys %HASH )
{
print "$gPort\n";
}
给定问题中的键,对排序比较器进行简单的更改将得到所需的输出
for my $gPort (sort keys %HASH) {
print "$gPort => $HASH{$gPort}\n";
}
注意:上述代码假设键中的所有数字都出现在相同的位置,且长度相同。例如,一个
rajesh:001775
键将首先出现,而不是在1770和1780之间出现。您可以按值(而不是键)排序并打印哈希
用于我的$gPort(排序{$HASH{$a}$HASH{$b}}键%HASH){
打印“$gPort=>$HASH{$gPort}\n”;
}
看一看。特别是,如果设置$Data::Dumper::Sortkeys
,则将按排序顺序获取转储
例如:
use Data::Dumper;
$Data::Dumper::Sortkeys = 1;
my %some_hash;
# code to populate hash
[ . . . ]
print Dumper(\%some_hash);
当然,只有当您希望明确地转储散列时,这才有效。如果希望以其他格式进行打印,则只需对键进行排序并打印,如
foreach my $key (sort keys %some_hash) {
print "[KEY]: $key; [VAL]: $some_hash{$key}\n";
}
如果希望保留散列中元素的插入顺序,则可能是适合您的工具。它的用法非常简单: 向您展示一个简单的示例:
use Tie::IxHash;
tie my %days_in => 'Tie::IxHash',
January => 31,
February => 28,
March => 31,
April => 30,
May => 31,
June => 30,
July => 31,
August => 31,
September => 30,
October => 31,
November => 30,
December => 31;
print join(" ", keys %days_in), "\n";
# prints: January February March April May June July August
# September October November December
如果文件内容有这样的散列rajesh:2130 rajesh:1780 rajesh:2060 rajesh:1810 rajesh:1700,则其不起作用。预期结果为rajesh:1700 rajesh:1780 rajesh:1810 rajesh:1810 rajesh:2060 rajesh:2130您不能在散列中重复密钥;散列的要点是查找唯一键并检索关联的值。如果您只想存储有序对,请使用数组。是的,我们不能。我只给了您密钥列表。我的意思是这是一个键--“rajesh:1700”@RajeshKumar请编辑你的问题,包括你在输入中可能遇到的不同键的样本。刚刚编辑。希望现在一切都好。
use Tie::IxHash;
tie my %days_in => 'Tie::IxHash',
January => 31,
February => 28,
March => 31,
April => 30,
May => 31,
June => 30,
July => 31,
August => 31,
September => 30,
October => 31,
November => 30,
December => 31;
print join(" ", keys %days_in), "\n";
# prints: January February March April May June July August
# September October November December