如何从 perl hash 中获取一个随机的键(逛逛cu perl板块)

如果是在python中没什么好说的,直接取出来所有的key,然后直接random.choice就行了,如下:

In [119]: d
Out[119]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
In [120]: keys = d.keys()
In [121]: import random
In [122]: random.choice(keys)
Out[122]: 'a'
In [123]: random.choice(keys)
Out[123]: 'b'
In [124]: random.choice(keys)
Out[124]: 'b'

下面看下在perl中大家是怎么处理的。

第一种方式,取出所有的keys放到@aKeys,然后计算数组的长度$sMaxIndex,对$sMaxIndex执行rand函数得到一个随机数,然后使用这个随机数作为索引去访问数组@aKeys,得到一个随机的键。

#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use Data::Dumper;

my %hChars = (
    'A' => 'a',
    'B' => 'b',
    'C' => 'c',
    'D' => 'e',
    'E' => 'e',
    'F' => 'f',
);

print Dumper(\%hChars);

my $sMaxIndex = scalar(keys %hChars);
my @aKeys = keys %hChars;
my $sKey = $aKeys[int(rand $sMaxIndex)];
print Dumper($sKey);

第二种方法跟上面提到的python的解决方式类似,如下:

#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use Data::Dumper;
use List::Util qw(shuffle);

my %hChars = (
    'A' => 'a',
    'B' => 'b',
    'C' => 'c',
    'D' => 'e',
    'E' => 'e',
    'F' => 'f',
);

print Dumper(\%hChars);

my $sRandomKey = shuffle(keys %hChars);
print Dumper($sRandomKey);

参考资料:

已经解决.结贴 脚本 Perl - 如何从 hash 中获取一个随机的键:http://bbs.chinaunix.net/thread-4193152-1-1.html